fuaowei 发表于 2023-2-8 16:41:49

条件语句判断

写一个程序,对用户输入的数进行求和,用户可以在同一行输入多个数字,数字之间可以是任意一个分隔符。当用户输入任意字符时,结束程序并打印结果


#include<stdio.h>

int main()
{
        float num=0;
        double sum=0;
        int s;
        do
        {
                printf("请输入合法的数字:");
                do{
                        sum+=num;
                        s=scanf("%f",&num);
                }while(s==1&&getchar()!='\n');//不是很能理解这个条件判断的逻辑,假如数之间也有其他符号,岂不是直接跳出循环了,他是怎么忽略掉数之间的符号呢?
        }while(s==1);
       
        printf("结果是:%.2f\n",sum);
       
        return 0;
}

wp231957 发表于 2023-2-8 16:52:25

s==1表示什么意思

做最好的自己520 发表于 2023-2-8 17:59:09

首先你得了解 scanf() 函数的用法以及返回值
如下:
scanf()返回值:出至鱼Chttps://fishc.com.cn/thread-67391-1-1.html
如果函数调用成功,返回值是成功获取并填充到附加参数中的个数。
如果函数调用失败,返回值小于附加参数的个数(甚至是 0)。
如果读取到标准输入流的结尾处,则返回 EOF。        float num = 0;
        int s;// 负责接受 scanf() 函数返回的结果(0, 1)
       
        s = scanf("%f", &num); // 这里num你定义的是浮点型变量
                                               // 此时你输入的是个整数或者浮点数 那么scanf()返回的结果为真(1)
                                               // 若是你输入不是float类型的,例如 输入'a' 编译器就会说,你给我定义的是float类型的,'a'是啥玩意,于是气冲冲的扔给你一个 0(假),潇洒的离去{:10_335:}

以上是我的理解希望对你有帮助{:10_281:}

做最好的自己520 发表于 2023-2-8 18:17:37

7a8 其中的字符部分,被getchar()接收了,当你按下回车的时候就退出内层循环
while(s==1&&getchar()!='\n');

第一次循环 7   s = 1   getchar()接收一个 字符 'a' 并且判断是否为'\n'
第二次循环8   此时getchar()接收了一个\n 退出循环

fuaowei 发表于 2023-2-12 20:30:19

做最好的自己520 发表于 2023-2-8 17:59
首先你得了解 scanf() 函数的用法以及返回值
如下:
scanf()返回值:出至鱼Chttps://fishc.com.cn/th ...

可是都判断是假了,内层循环外层循环应该都跳过啊,怎么会忽略掉'a'继续读取8呢

fuaowei 发表于 2023-2-12 20:31:42

wp231957 发表于 2023-2-8 16:52
s==1表示什么意思

你查查运算符那个表格不就清楚吗,这种问题居然问我???

dolly_yos2 发表于 2023-2-12 20:52:06

fuaowei 发表于 2023-2-12 20:30
可是都判断是假了,内层循环外层循环应该都跳过啊,怎么会忽略掉'a'继续读取8呢

感觉4楼说的挺明白的了,实在不行可以 lldb 调试看看

fuaowei 发表于 2023-2-12 21:39:24

dolly_yos2 发表于 2023-2-12 20:52
感觉4楼说的挺明白的了,实在不行可以 lldb 调试看看

那个大佬讲的确实是很清楚,我也大致明白,就是很奇怪'a'居然是第一次循环里的,不应该是7是第一次循环,'a'是第二次循环,然后再依次循环{:10_266:}。第一次学习编程理解这个好痛苦
页: [1]
查看完整版本: 条件语句判断