char again;
do {
counter = 0;
while (counter < 3) {
printf("Please enter a number: ");
scanf("%d", &num);
counter++;
sum += num;
}
if (counter == 3) {
printf("Would you like to continue? [Y]Yes [N]No:");
scanf("%c", &again);
}
}while (again == 'Y');
我似乎无法弄清楚为什么这不起作用。如果我输入Y则会中断,如果我输入N则会中断。我需要循环,直到用户输入“N”退出程序而没有其他字母。
答案 0 :(得分:8)
将scanf
来电更改为:
scanf(" %c", &again);
诀窍在%c
之前的空格中:它指示scanf
函数在返回N或Y之前忽略任何空格字符。否则你将从前一个{读取返回的车厢} {1}}来电。
来自man 3p scanf
(POSIX one):
由一个或多个空白字符组成的指令应通过读取输入执行,直到无法读取更多有效输入,或者直到 第一个字节不是空白字符,仍然未读。
这是一项复杂的功能。我建议小心阅读手册页:它可以比大多数人想象的要多得多。
答案 1 :(得分:0)
问题是scanf("%c", &again)
在最后一个数字后读取换行符,这就是循环总是中断的原因。这也是人们回避scanf()
而不是fgets()
的原因。你倾向于获得更好的诊断和更少的讨厌的陷阱。
你怎么能为自己调试这个?
您可以打印在读取时读取的数据 - 添加:
sscanf()
在printf("Read: %d\n", again);
之后。此外,您应该检查每个scanf()
来电,以确保您获得所需的数据:
scanf()