携手创作,共同成长!这是我参与「掘金日新计划 · 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;
}
运算结果
分析while循环
while循环的测试条件的表达式:status==1
==运算符是C的相等运算符,该表达式判断status是否等于1.不要把status==1与status=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()的返回值,就可以避免这些问题。