首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Scanf多值C

Scanf多值C
EN

Stack Overflow用户
提问于 2014-03-12 18:44:18
回答 6查看 284关注 0票数 0

我需要帮助短代码在C,我必须阅读浮动在输入行与空格分开,输入是以浮点数0或EOF结束。

如果我不知道有多少个数字或输入,或者它是如何工作的,如果我只读数字而不是字符,如何向EOF询问如何做到这一点?

谢谢你的回应。

单行输入示例:

代码语言:javascript
运行
复制
12 11 10 45 50 12 EOF
12 10 11 45 0 

int main(void)  
{
    float num;
    float sum = 0;

    do{
       scanf("%f", num);
       sum += num;
    } while(EOF || num == 0);
    return 0;
}
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2014-03-12 18:49:25

来自扫描参考

成功后,函数返回成功填充的参数列表中的项数。由于匹配失败、读取错误或文件结束的影响,此计数可以与预期的项目数匹配,或小于(甚至为零)。 如果读取错误发生或读取时到达文件末尾,则设置正确的指示符(feof或feof)。而且,如果在任何数据被成功读取之前发生任何一种情况,则返回EOF。 如果编码错误发生在解释宽字符时,函数将errno设置为EILSEQ。

因此,您可以将do-while循环重写为以下内容

代码语言:javascript
运行
复制
int retval;
while((retval = scanf("%f", &num)) != EOF && retval > 0 && num != 0) {
    sum += num;
}

if(retval == 0) {
    printf("input read error.\n");
}

来匹配你的约束。

还请注意,在将变量传递给&时,需要在变量中添加前缀,因为函数需要处理一个指针(您需要传递变量地址)。

编辑:

参见本题关于Windows中的EOF问题

票数 0
EN

Stack Overflow用户

发布于 2014-03-12 19:05:31

scanf的手册-

scanf返回成功匹配和分配的项数,在早期匹配失败的情况下,这些项可以少于规定的数量,甚至为零。如果在第一次成功转换或匹配失败之前到达输入结束,则返回EOF值。

这意味着scanf只有在被调用时遇到EOF作为第一个输入时才会返回EOF,因为EOF之前必须有一个换行符'\n‘,否则它将不能工作(取决于操作系统)。您还必须说明scanf可能遇到的匹配失败。

代码语言:javascript
运行
复制
#include <stdio.h>

int main(void) {
    float num;
    float sum = 0;
    int val;

    while((val = scanf("%f", &num)) != EOF && val == 1) {
        sum += num;
    }

    if(val == 0) {
        printf("matching failure. input is not a float.\n");
    }
    else {
        printf("end of input.\n");
    }

    return 0;
}
票数 1
EN

Stack Overflow用户

发布于 2014-03-12 19:04:39

您可以像这样重新编写代码

代码语言:javascript
运行
复制
         int main(void) 
         {
            float num;
            float sum = 0;
            do
            {
               scanf("%f", &num);
               sum += num;
            } while((!feof(stdin)) && (num != 0));

            printf("%f", sum);
            return 0;   

          }

这里feof表示输入流的结束。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22361004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档