2014-09-05 57 views
2

Scanf應返回輸入的字符數。但奇怪地只返回1。scanf返回值不如預期

scanf ("%d",&num_test_cases); 

for (i=0;i<num_test_cases;i++) 
{ 
    level=scanf ("%s",ch); 
    printf ("\n %s\n",ch); 
    printf ("%lld\n",level); 

} 

樣品輸入:

4 
lrl 
rll 
r 
lllr 

輸出:

lrl 
1 
rll 
1 
r 
1 
lllr 
1 
+0

我猜你在等待scanf返回輸入的字符數,這不是scanf的工作方式。您要求scanf掃描一個項目(%s),並返回它成功掃描一個項目。 – 2014-09-05 14:21:13

+0

返回1是好的。這意味着某些內容存儲在'ch'中。 '0'表示沒有讀(不太可能)。 'EOF'意思是'stdin' isat文件結束(關閉)。 – chux 2014-09-05 14:40:36

+0

C11dr§7.21.6.216「如果在第一次轉換(如果有)完成之前發生輸入故障,則fscanf函數返回宏EOF的值;否則,該函數將返回分配的輸入項的數量,如果發生早期的匹配失敗,那麼可以提供甚至爲零,甚至爲零。「 – chux 2014-09-05 14:42:19

回答

8

在C,scanf()回報項目數成功讀取... 其實,printf()返回字符數成功寫在輸出上!

因此,由於您的scanf每次迭代只接受1個輸入,因此level程序中的變量因每次迭代而返回1!