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程序打印未知大小的字符串数组的元素的主要内容,如果未能解决你的问题,请参考以下文章