CODE:
#include <stdio.h>
main() {
int nums[100], i;
char answer;
int count = 0;
double avg;
for (i = 0; i < 100; i++) {
printf("Enter number %d: ", i + 1);
scanf("%d", &nums[i]);
printf("Another? ");
scanf("%c", &answer);
count += nums[i];
}
}
生成
~> a.out
Enter number 1: 1
Another? Enter number 2: 2
Another? Enter number 3: 3
Another? Enter number 4: 4
Another? Enter number 5: 5
Another? Enter number 6: 6
Another? Enter number 7: 7
Another? Enter number 8: 8
Another? Enter number 9:
它应该问我是否要输入另一个号码,但由于某种原因,scanf无效。此外,我需要这样做,以便用户可以输入100个数字,或者根据该数字输入任何数字,提示“你想输入另一个数字”。如果答案为否,则终止,如果是,则继续。
答案 0 :(得分:6)
您的第一个scanf在缓冲区中留下换行符。这是因为%d
忽略了尾随空白而%c
没有。使用这个便宜的技巧让第二个scanf
吃掉空白:
scanf(" %c", &answer);
^
这个问题很常见,您可以在C FAQ中了解更多相关信息。
答案 1 :(得分:0)
在%c
之前需要一个空格,以便跳过scanf在数字末尾停止时未读取的换行符。
我有一些未经请求的建议......
不要直接使用scanf(3)
,要让它做你想做的事情太难了。通常最好使用fgets(3)
然后使用sscanf(3)
。
打开警告进行编译。 (在我的Mac上,这意味着cc -Wall ...
)
启用警告后,您的程序会修复一些问题:
#include <stdio.h>
int main(void) {
int nums[100], i;
char answer;
int count = 0;
// double avg;
for (i = 0; i < 100; i++) {
printf("Enter number %d: ", i + 1);
scanf(" %d", &nums[i]);
printf("Another? ");
scanf(" %c", &answer);
if (answer != 'y' && answer != 'Y')
break;
count += nums[i];
}
return 0;
}