2013-12-10 21 views
2

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

#include <stdio.h> 

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

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

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

pscanf分配的返回值。
當我提供n1n2的值時,p的值始終爲2.我不明白爲什麼值始終爲2,無論我爲n1n2提供的編號是多少。

+1

嗨斯科舍省!歡迎來到這個網站。這種編碼問題應該在StackOverflow.com上提出,而不是在這裏。 –

回答

9

scanf回報值的數量讀取,而你的情況是2

+0

請您詳細說明一下嗎? – 2013-12-10 14:04:18

+2

@Scotia'scanf'返回*數值**的值*讀取*而不是值本身。 –

+0

哦!現在我懂了。 – 2013-12-10 14:16:46

3

scanf()返回值的數量讀除了%n值。

「A%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); 
}