c程序打印未知大小的字符串数组的元素

Posted

技术标签:

【中文标题】c程序打印未知大小的字符串数组的元素【英文标题】:c program to print the elements of a string array of an unknown size 【发布时间】:2022-01-17 23:47:34 【问题描述】:

我正在尝试编写一个程序来打印出获胜次数最多的玩家,如果出现平局,则应打印所有获胜次数最多的玩家。该程序将球员的姓名作为参数,然后要求用户输入进行了多少场比赛,然后输入每场比赛的结果。我创建了一个玩家结构,用于跟踪玩家姓名以及他们赢得的游戏数量。我被困在了领带部分,因为我的程序似乎在编译时出现了一个奇怪的错误,如下所示:

./playgame one two three                                                                                             
How many games? 5 
Match winner: one
Match winner: two
Match winner: two
Match winner: three
Match winner: one
one
two
AWL=)

我认为问题在于我存储和读取获胜者的方式。这是我到目前为止编写的用于打印获胜者的代码。

void bestplayer(void)

    string winner[player_count];
    int highest = 0;

    for (int i = 0; i < player_count; i++)
    
        if(players[i].wins >  highest)
        
            highest = players[i].wins;
            winner[i] = players[i].name;
        

        else if(players[i].wins== highest)
        
            winner[i] = players[i].name;
        
    

    // print out the winner list
    for(int j = 0; j < sizeof(winner)/sizeof(winner[0]); j++)
    

        printf("%s\n",winner[j]);

    

    return;

在上面的示例中,我应该在结果中得到 1 和 2。我认为这可能是因为它试图获取数组的第三个元素是空的,所以我尝试添加这个语句,但它给了我相同的结果。

// print out the winner list
    for(int j = 0; j < sizeof(winner)/sizeof(winner[0]); j++)
    
        if(winner[j] != NULL)
        
            printf("%s\n",winner[j]);
        
    

我怀疑我的问题出在字符串声明中。问题是我不知道我会有多少赢家,但最坏的情况是他们都是赢家。我该如何解决这个问题?

【问题讨论】:

你的代码真的是C吗? string 是什么?这是 CS50 练习吗? 当您已经拥有player_count 中的元素数量时,为什么还要sizeof(winner)/sizeof(winner[0]) 如果你想使用 printf 来打印一个 C++ 字符串,你需要这样做: printf("%s\n", Winner[i].c_str()); 【参考方案1】:

更新:我能够通过简化方法来解决问题。我基本上对数组字符串太努力了。

相反,我确定了获胜次数最多的值并将该值存储在最高值中。 然后我使用循环遍历该结构并打印出所有获胜者的姓名与最高值匹配。

【讨论】:

以上是关于c程序打印未知大小的字符串数组的元素的主要内容,如果未能解决你的问题,请参考以下文章

C如何打印字符串数组中字符串的大小

使用ctypes python包装C函数返回未知大小的数组

c语言中如何求数组长度

C如何在字符串数组中打印字符串的大小

c++中用new给未知大小的数组分配空间怎么弄?

C程中如何计算数组(一维及二维)占内存空间的大小