scanf的返回值的用法

dhi*_*007 5 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;
}
Run Code Online (Sandbox Code Playgroud)

Iha*_*imi 6

因为scanf()返回一个值,表示字符串与传递的格式匹配的程度,即成功填充数据的参数数量.

您会知道,如果您阅读某种手册页或标准,如果您遇到过您不知道的功能,请尽可能多地阅读它,以便您了解如何使用它.


use*_*520 5

scanf返回其说明符列表中成功匹配项的数量.因此,如果输入"q",scanf将返回0(因为"q"不是整数),循环将终止.


Sou*_*osh 5

请看看在手册页的scanf().它返回成功扫描的项目数.所以返回值用于检查的成功scanf().

在你的代码中,

 status = scanf("%ld", &num);
 // code
 while (status == 1) 
Run Code Online (Sandbox Code Playgroud)

将返回值scanf()存储到status后面并检查以检查是否scanf()已成功扫描1项目.

  • 如果它已返回1,则表示long int已输入.然后while()循环将继续,请求下一个输入.
  • 你输入的一个q,它将与coversion说明符不匹配%ld,因此scanf()会失败,因此它将返回0.然后while()循环将终止.