我正在从一本书中学习C,我开始使用循环指令。但是有一个我无法理解的示例代码。
有谁可以告诉我为什么作者使用了status = scanf("%ld", &num);
?为什么=
有scanf
?
/* summing.c -- sums integers entered interactively */
#include <stdio.h>
int main(void)
{
long num;
long sum = 0L; /* initialize sum to zero */
int status;
printf("Please enter an integer to be summed ");
printf("(q to quit): ");
status = scanf("%ld", &num);
while (status == 1) /* == means "is equal to" */
{
sum = sum + num;
printf("Please enter next integer (q to quit): ");
status = scanf("%ld", &num);
}
printf("Those integers sum to %ld.\n", sum);
return 0;
}
答案 0 :(得分:6)
因为scanf()
返回一个值,表示字符串与传递的格式匹配的程度,即成功填充数据的参数数量。
您会知道,如果您阅读某种manual页面或标准,如果您遇到过您不了解的功能,请尽可能多地阅读相关内容,以便你可以理解如何使用它。
答案 1 :(得分:5)
scanf
返回其说明符列表中成功匹配的项目数。因此,如果输入&#34; q&#34;,scanf
将返回0(因为&#34; q&#34;不是整数),循环将终止。
答案 2 :(得分:5)
请查看scanf()
的{{3}}。它返回成功扫描的项目数。因此,返回值用于检查scanf()
的成功。
在您的代码中,
status = scanf("%ld", &num);
// code
while (status == 1)
scanf()
的返回值存储在status
中,稍后检查以检查scanf()
是否已成功扫描1
项目。
1
,则表示已输入long int
。然后while()
循环将继续,请求下一个输入。q
之后,它不会与转换说明符%ld
匹配,因此scanf()
将失败,因此它将返回0
。然后while()
循环将终止。