我对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);
}

07-28 03:04
查看更多