2014-09-05 78 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!