#include<stdio.h>
#define LINESIZE 1024
int n, sum =0;
char line[LINESIZE];
int main() {
while(1) {
printf("enter an integer: ");
if(!fgets(line, LINESIZE, stdin)) {
clearerr(stdin);
break;
}
if (sscanf(line, "%d", &n) == 1)
sum += n;
}
printf("%d \n",sum);
}
当我在Cygwin中运行时,输出似乎无限,我不知道如何返回sum
?我错过了什么吗?
enter an integer: 1
enter an integer: 2
enter an integer: 3
enter an integer: 4
enter an integer: 5
enter an integer: 6
答案 0 :(得分:3)
你的while
循环没问题,程序循环直到它到达stdin
的文件末尾。在终端上,您可以通过在Unix下按 Ctrl-D 并在Windows上按 Ctrl-Z Enter 来发出文件结束信号。
或者,您可以在阅读某些特定输入时退出循环,例如空白行,没有数字的行,带有单词quit
的行...
关于该计划的一些评论:
stdin
上的错误条件。for (;;) { ... }
。main()
应返回0. 以下是您的计划的修改版本:
#include <stdio.h>
#define LINESIZE 1024
int main(void) {
char line[LINESIZE];
int n, sum = 0;
for (;;) {
printf("enter an integer: ");
if (!fgets(line, sizeof line, stdin)) {
break;
}
if (*line == '\n') {
/* stop on empty line */
break;
}
if (!strcmp(line, "quit\n")) {
/* stop if the user types quit */
break;
}
if (sscanf(line, "%d", &n) == 1) {
sum += n;
}
}
printf("%d\n", sum);
return 0;
}
答案 1 :(得分:0)
除了问题中提到的评论之外,我还想提出一个稍微不同的方法。您可以修改计算if
的{{1}}语句,以便当用户的输入不是sum
时,您选择退出while循环。
int
示例输出1:
if (sscanf(line, "%d", &n) == 1) {
sum += n;
}
else {
printf("Could not get integer\n");
break;
}
样本输出2:sscanf从5gf成功提取5
enter an integer:
3
enter an integer:
4
enter an integer:
2
enter an integer:
r
Could not get integer
9
示例输出3:sscanf无法从r5f中提取5并且正确如此
enter an integer:
3
enter an integer:
4
enter an integer:
5gf
enter an integer:
t
Could not get integer
12