scanf的返回值的用法

时间:2015-05-16 17:41:11

标签: c scanf

我正在从一本书中学习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;
}

3 个答案:

答案 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()循环将终止。