鱼C论坛

 找回密码
 立即注册
查看: 1201|回复: 3

c语言

[复制链接]
发表于 2023-11-6 19:28:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请问一下下面的程序输入回车时scanf接收之后status不应该是0吗还是getchar() 先接收
int main()
{
        float num = 0;
        double sum = 0;
        int status;

        do
        {
                printf("请输入合法的数字:");
                do
                {
                        sum = sum + num;
                        status = scanf("%f", &num);
                } while (getchar() != '\n'&&status == 1);//改写 是先执行,原来是先判断执行的是上一次的
        } while(status == 1);

        printf("结果是:%.2lf\n", sum);

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-6 19:28:49 | 显示全部楼层
在这个程序中,当输入回车时, scanf 函数会接收一个空字符,并将其存储在 num 变量中。然后, getchar() 函数会接收这个空字符,并将其丢弃。因此, status 的值不会是0,而是1。

在这个程序中, do-while 循环用于重复接收合法数字并计算它们的和。在内部的 do-while 循环中,我们首先将 num 的值加到 sum 中,然后使用 scanf 函数接收一个浮点数,并将其存储在 num 变量中。接下来,我们使用 getchar() 函数来接收输入流中的字符,直到遇到换行符为止,并且只有在上一次的 scanf 函数成功接收到一个浮点数时,才会执行这个循环。这样做是为了确保我们只接收合法的数字,并且在接收到非法字符时,循环会终止。

外部的 do-while 循环用于检查上一次的 scanf 函数是否成功接收到一个浮点数。如果成功接收到一个浮点数,则继续循环并接收下一个数字。如果没有成功接收到一个浮点数,则循环终止。

最后,我们打印出计算得到的和。

希望这个解答对你有帮助!如果你还有其他问题,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-6 19:29:03 | 显示全部楼层
在你提供的代码中,通过循环实现了不断接收合法数字并计算其总和的功能。你正确地使用了scanf()函数来接收输入的浮点数,并使用getchar()来处理输入缓冲区中的换行符。

在你的代码中,将status设置为scanf()函数的返回值是一个很好的做法。当scanf()成功读取到一个浮点数时,它会返回1,表示成功读取了一个数值。如果scanf()无法读取到浮点数,比如输入非法字符或者输入结束时(回车键),它会返回0。

然而,你的代码中存在一个小问题。你在使用scanf()函数之前,就将num加到了sum中。这意味着,在第一次循环中,sum已经包含了上一次循环的最后一个有效的num值。为了解决这个问题,只需要将sum = sum + num;语句放在do-while循环的末尾即可,这样可以保证sum只包含本次循环读取到的有效值。

下面是修改后的代码:
#include <stdio.h>int main(){    float num = 0;    double sum = 0;    int status;    do    {        printf("请输入合法的数字:");        do        {            status = scanf("%f", &num);            sum = sum + num;        } while (getchar() != '\n' && status == 1);    } while (status == 1);    printf("结果是:%.2lf\n", sum);    return 0;}
修改后的代码可以正确地接收合法数字并计算其总和,当输入回车键时会退出循环,并输出结果。

希望这个解答对你有帮助。如果还有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-6 19:36:40 | 显示全部楼层
Mike_python小 发表于 2023-11-6 19:29
在你提供的代码中,通过循环实现了不断接收合法数字并计算其总和的功能。你正确地使用了scanf()函数来接收 ...

但是执行时候输入回车并不会结束,而且你这个程序会少执行一次
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-5 13:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表