while语句赋值与等值的区别

本文通过实例代码对比分析了C语言中while语句使用赋值与等值条件时的不同行为,揭示了当scanf()读取错误导致条件判断时的死循环问题。在赋值情况下,由于条件始终为真,导致死循环;而在等值条件下,错误读取会使得条件不成立,从而跳出循环。这个例子突显了理解和正确使用条件判断在编程中的重要性。
摘要由CSDN通过智能技术生成

首先来说说while语句的满足条件:真(true)即执行,假(false)不执行,这貌似是句废话。

当while条件满足时,就会执行一次循环体,执行完以后会再判断一次条件。

while语句是即做循环又做判断,这跟if不同,if是只做判断,不做循环,条件满足就执行一次,执行完就不会再回过头来继续执行。

在while条件表达式中有大于、小于或者==,还可以直接用true或者false表示。

如果在条件表达式中小于0或者等于0即为假,1即为真

1、while赋值与等值的区别,代码如下:

赋值:

#include <stdio.h>
int main(void){
    long num;
    long sum = 0L;
    int status;

    printf("请输入一个要求和的整数(q to quit): ");
    status = scanf("%ld", &num);
    while (status = 1){
        sum = sum + num;
        printf("请输入下一个整数 (q 退出) ");
        status = scanf("%ld", &num);
    }
    printf("这些整数之和: %ld.\n", sum);
    return 0;
}

结果如下:

等值:

#include <stdio.h>
int main(void){
    long num;
    long sum = 0L;
    int status;

    printf("请输入一个要求和的整数(q to quit): ");
    status = scanf("%ld", &num);
    while (status == 1){
        sum = sum + num;
        printf("请输入下一个整数 (q 退出) ");
        status = scanf("%ld", &num);
    }
    printf("这些整数之和: %ld.\n", sum);
    return 0;
}

结果如下:

从综上俩者结果可以看出:赋值进入了死循环,等值则是跳出了循环体。如果仔细观察俩处代码,不难发现俩处代码基本上是一样的,只是一个是赋值”status = 1",一个是等值“status == 1”。为什么俩者区别如此之大?开始的时候我也是百思不得其解,俩者不都是等于1吗?本来按道理来说赋值运算在“status=q”的时候即为0也就是假,假的话条件不满足自然就不会进入循环体,就像“status == q”一样。后来在看书的时候再回过头来想了一阵子才恍然大悟,书上解释的原话是这样的:当scanf()把q作为整数读取时失败了,它把q留下。在下次循环时,scanf()从上次读取失败的地方(q)开始读取,scanf把q作为整数读取,又失败了,周而复始进入了一个死循环。书上的解释难免有点牵强,但也说的过去,我当时的理解是:当scanf()把q作为整数读取失败时,条件为假则应该不会进入循环体,也就是说不会有后面的“请输入下一个整数(q 退出) ”死循环,但是事实上它就是进入了循环体并且执行了里面的循环语句 ,后面我想到赋值与等值的区别,赋值是一个变量而等值是个固定值,变量意味着变数它可以是1在下一秒也可以是2。想到这我还是想不明白然后就在下一秒的时候我脑海里有个想法一闪而过,那就是程序执行过程:

首先说说赋值程序执行过程:printf("请输入一个要求和的整数(q to quit): ");然后让你键盘输入,这时候如果你直接输入一个q直接进入死循环,也就是while(q=1)即while(0=1),注意这里是赋值而不是0等于1吗,简写成while(1),1即为真,所以当while条件满足的时候就会进入死循环。如果是等值程序执行过程while(q==1)即while(0==1),0等于1吗?不等于直接跳出循环,想到这就全明白了。赋值与等值的坑就坑在这里!

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值