我正在尝试打印用户输入的朋友姓名列表。最多可以输入5个名字。用户也可以选择输入< 5。我不明白为什么输入了5个名字后我无法跳出循环?谢谢
#include <stdio.h>
int main(void) {
char namesArray[5][100]; //5 = number of names while 100 = the maximum length of the name
int x, y;
char yesNo;
int counter = 0;
do {
for (x = 0; x < 5; x++) {
printf("\nEnter a friends name: ");
scanf(" %s", &namesArray[x][0]);
counter++;
printf("\nWould you like to enter another friends name? Y or N: ");
scanf(" %c", &yesNo);
if (yesNo == 'N')
break;
}
} while (yesNo == 'Y' || counter == 5);
if (yesNo == 'N' || counter == 5){
for (x = 0; x < counter; x++) {
printf("\n\n%s", namesArray[x]);
}
}
return 0;
}
发布于 2021-10-16 14:06:18
回答你的问题:
您的do-while循环永远不会结束,因为当达到条件时,counter
永远不会为5
。在x
为5
时结束的for循环中增加counter
。因此,当您离开第一个for循环时,counter
将为6
。(因为当循环开始时,x
为0
,而您将counter
增加到1
)
因此,要使您的代码正常工作,需要将do-while条件更改为:
while (yesNo == 'Y' || counter < 5);
更好的解决方案是稍微修改一下代码,完全摆脱do-while循环。您可以只使用for循环(以确保最多可以输入5个名称),并在其中添加yesNo
的条件,这样就可以在输入5个名称之前中断。
发布于 2021-10-17 06:26:58
所有其他的评论都是真的,所以你可能想要这样的东西:
#include <stdio.h>
int main(void)
{
char namesArray[5][100]; // 5 = number of names, 100 = max length of each
char yesNo;
int counter;
for (counter = 0; counter < 5; counter++) {
printf("\nEnter a friends name: ");
scanf(" %99s",namesArray[counter]);
printf("\nWould you like to enter another friends name? Y or N? ");
scanf(" %c", &yesNo);
if (yesNo == 'N')
break;
}
for (int x = 0; x < counter; x++)
printf("\n\n%s",namesArray[x]);
exit(0);
}
https://stackoverflow.com/questions/69599525
复制相似问题