我对EOF有点问题。我需要把数字写在一行,中间有空格,然后把它们加在一起。Scanf必须以一个EOF结束(Ctrl+D)
我有个小程序
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char** argv){
double numbers=0, sum=0;
printf("Enter numbers: ");
while(scanf("%lf", &numbers) != EOF){
sum=sum+numbers;
}
printf("\n %.2lf", sum);
}
这个程序的问题是我需要按Ctrl+d两次,直到它打印出sum。
输入/输出示例:
输入数字:1 3 5 6
十五
最佳答案
EOF
前面必须有一个换行符,否则它将不起作用。但这取决于操作系统。在包含输入的行末尾输入的EOF无法识别。从scanf
的手册页-
scanf返回成功匹配和分配的项目数
可能小于规定值,甚至在发生
早期匹配失败。如果输入结束,则返回值EOF
在第一次成功转换或匹配之前到达
发生故障。
因此,您应该检查scanf
的返回值,而不是1
。
#include <stdio.h>
int main(void) {
double numbers = 0, sum = 0;
printf("Enter numbers: ");
while(scanf("%lf", &numbers) == 1) {
sum += numbers;
}
printf("\n %.2lf", sum);
}