鱼C论坛

 找回密码
 立即注册
查看: 1714|回复: 7

[学习笔记] 条件语句判断

[复制链接]
发表于 2023-2-8 16:41:49 | 显示全部楼层 |阅读模式

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

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

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

#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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-2-8 16:52:25 | 显示全部楼层
s==1  表示什么意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


以上是我的理解希望对你有帮助
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-8 18:17:37 | 显示全部楼层
7a8 其中的字符部分,被getchar()接收了,当你按下回车的时候就退出内层循环
  1. while(s==1&&getchar()!='\n');
复制代码


第一次循环 7     s = 1   getchar()接收一个 字符 'a' 并且判断是否为'\n'
第二次循环8     此时getchar()接收了一个\n 退出循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-12 20:30:19 | 显示全部楼层
做最好的自己520 发表于 2023-2-8 17:59
首先你得了解 scanf() 函数的用法以及返回值
如下:
  scanf()返回值:出至鱼C  https://fishc.com.cn/th ...

可是都判断是假了,内层循环外层循环应该都跳过啊,怎么会忽略掉'a'继续读取8呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-12 20:31:42 | 显示全部楼层
wp231957 发表于 2023-2-8 16:52
s==1  表示什么意思

你查查运算符那个表格不就清楚吗,这种问题居然问我???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

感觉4楼说的挺明白的了,实在不行可以 lldb 调试看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-12 21:39:24 | 显示全部楼层
dolly_yos2 发表于 2023-2-12 20:52
感觉4楼说的挺明白的了,实在不行可以 lldb 调试看看

那个大佬讲的确实是很清楚,我也大致明白,就是很奇怪'a'居然是第一次循环里的,不应该是7是第一次循环,'a'是第二次循环,然后再依次循环。第一次学习编程理解这个好痛苦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 07:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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