C语言的while循环

632 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第19天,点击查看活动详情

用scanf()的返回值来结束循环

#include <stdio.h>
int main(){
    long num;
    long sum=0;    //把sum初始化为0
    int status;
    printf("Please enter an integer to be summed ");
    printf("(q to quit):");
    status=scanf("%1d",&num);
    while(status==1){  //==的意思是“等于”
        sum=sum+num;
        printf("Please enter next integer (q to quit):");
        status=scanf("%1d",&num);
    }
    printf("Those integers sum to %1d.\n",sum);
    return 0;
}

运算结果

Snipaste_2022-08-16_20-56-13.png

分析while循环

while循环的测试条件的表达式:status==1

==运算符是C的相等运算符,该表达式判断status是否等于1.不要把status==1status=1相提并论。status=1是把1赋给status。根据测试条件status==1,只要status等于1,循环就会重复。每次循环,num的当前值都被加到sum上,这样sum的值始终是当前整数之和。当status的值不为1时,循环结束。运行结果打印的事sum的最终值。

要让程序正常运行,每次循环都要获取num的一个新值,并重置status。程序利用scanf()的两个不同的特性来完成。首先,使用scanf()读取num的一个新值:然后,检查scanf()的返回值判断是否成功获取值。

scanf()返回成功读取项的数量。

如果scanf()成功读取一个整数,就把该数存入num并返回1,随后返回值将赋给status。

注意:用户输入的值存储在num中,不是status中。

这样做同时更新了num和status的值,while循环进入下一次迭代。如果用户输入的不是数字,scanf()会读取失败并返回0.此时,status的值就是0,循环结束。因为输入的字符q不是数字,所以它会被放回输入队列中。

循环何时停止

例子中的程序利用scanf()的双重特性避免了循环中交互输入时的问题。例如,假设scanf()没有返回值,那么每次循环只会改变num的值。虽然可以使用num的值来结束循环,(例如把num大于0或num不等于0作为此时条件,但是这样用户就不能输入某些值,例如-3或0.也可以在循环中添加代码。使用scanf()的返回值,就可以避免这些问题。