我正在从一本书中学习C,我开始使用循环指令。 但是有一个我无法理解的示例代码。

任何人都可以告诉我为什么作者使用status = scanf("%ld", &num); 为什么有一个= with 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;
}

===============>>#1 票数:6

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

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

===============>>#2 票数:5

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

===============>>#3 票数:5

请查看scanf()手册页 它返回成功扫描的项目数。 因此返回值用于检查scanf()的成功。

在你的代码中,

 status = scanf("%ld", &num);
 // code
 while (status == 1) 

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

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

  ask by dhiman007 translate from so

未解决问题?本站智能推荐:

2回复

scanf()的返回值

这是我的代码重复读取由用户的空格分隔的三个变量。 输入格式应为'char int int'(例如b 3 3)。 我使用scanf函数的返回值来确保输入正好是三个变量。 输入和输出: 第一行输入没问题。 但是当我输入第二行时,它显示scanf()仅从该行读取一个变量。 我的
1回复

scanf返回值与预期不符

Scanf应该返回输入的字符数.. 但奇怪的是一直只返回1。 样本输入: 4 lrl rll r lllr 输出: lrl 1 rll 1 r 1 lllr 1
3回复

使用“ scanf()”的返回值检查文件结尾

我正在网上搜索如何使用scanf的返回值检查文件结尾! 我找到了以下代码。但是我很难理解? 这种方法如何运作? “〜”运算符表示什么?
1回复

C Scanf:-1的返回值是什么意思?

我正在编写一个程序来扫描stdin的输入(无论如何它应该是这样)。 在程序的某个点上,我需要使用scanf扫描一个int。 我也尝试过其他一些函数,它们似乎都会导致同样的错误 - 它们返回-1。 我认为这意味着在收集数据/变量赋值时出现了一些错误,但是我无法找到有关此指示的错误类型的文档。
2回复

我们如何测试scanf()函数的返回值?

我想确认scanf()函数返回的值是否为浮点数。 我怎样才能做到这一点? 如果向scanf()函数提供了错误的数据类型,我的代码就不会运行。 同样,我如何确认返回的值是否是字符串?
1回复

字符串的scanf()返回值

此代码... ... 给输出:... ... 我可以理解字符串字符的内存地址之间的关系,但是scanf()返回的是哪个内存地址,为什么是十六进制的,为什么它返回字符串的内存地址,同时返回数字和字符常量的输入数量呢?
1回复

C:忽略scanf的返回值

我不断收到错误消息,警告:忽略使用属性warn_unused_result声明的'scanf'返回值[-Wunused-result] 我似乎无法找出问题所在。 该代码应该以以下格式读取输入: ñ 0 0 0 0 米 0 0 0 n和m是第一和第二数组的长
2回复

测试所有有关scanf返回值的情况

使用下面的代码,如果我输入1个字符串和ctrl-D,它将打印未扫描的两个单词并退出。 但是,如果我输入3个或更多字符串,它将采用前两个字符串并丢弃其余字符串。 我该如何解释-如果输入了两个以上的字符串,则会退出?
1回复

scanf的返回值和输入验证

输入应为整数字integer的格式,中间有空格。 据我所知,我已经在下面编写了代码。 我现在正在代码的错误检查部分。 如果输入的格式不正确,我将如何检查? 我需要检查的三种错误类型将具有以下输入格式:“ WORD 99”,“ 10WORD 33”和“ 10 WORD”。 给
1回复

忽略仅吞噬scanf(gcc)的返回值

因此,我已经阅读了此问题和其他相关问题,并且我知道检查scanf的返回值以避免意外是个好主意。 但是我的代码中有以下scanf : 正如你所看到的,我铸造的结果scanf来void ,但GCC下仍警告-ansi -pedantic -Wall -O3 ,如上所述这里 。 没有编译