不了解scanf的返回值

时间:2013-12-10 14:00:15

标签: c

我有以下C程序,我不理解scanf的返回值。

#include <stdio.h>

int main()
{
    int p,n1,n2;

    p=scanf("%d %d",&n1, &n2);

    printf("%d", p);
    return 0;
}

p被指定为scanf的返回值 当我为n1n2提供值时,p的值始终为2.我不明白为什么值始终为2,无论我为{{1 }和n1

2 个答案:

答案 0 :(得分:9)

scanf返回读取的值的数量,在您的情况下为2。

答案 1 :(得分:3)

scanf()返回读取的值除以外的%n值。

“执行%n指令不会增加返回的赋值计数...”C11dr§7.21.6.2

int p,n1,n2;
int n;
p=scanf("%d%n%d",&n1, &n, &n2);
// p  takes on the value of 2, not 3, should n1 and n2 successfully scan.

如果没有转化,scanf()会返回EOF

“如果在第一次转换之前发生输入故障,fscanf函数将返回宏EOF的值......”

char buf[100];
int n;
while ((n = scanf(" %99[^\n]", buf)) != EOF) {
  handle(buf, n);
}