2010-01-18 37 views
4

在Windows上,scanf()如何工作?

char c; 
int i; 

scanf("%d", &i); 
scanf("%c", &c); 

计算机跳过,因为“\ n”是在缓冲器剩余从控制台获取字符。 但是,我发现下面的代码运行良好。

char str[10]; 
int i; 

scanf("%d", &i); 
scanf("%s", str); 

就像上面的例子中,“\ n”是留在缓冲区,但为什么scanf函数成功获取从控制台这次字符串?

+1

这里需要多一点输入。你在控制台上输入什么内容?你想得到什么?没有理由说上述代码不能按预期工作,但这取决于预期的内容。 – Martin

回答

6

从GCC手册页(我没有Windows好用):

%C:字符固定数量的匹配,始终。最大字段宽度说明如何读取多个字符;如果不指定最大值,则默认值为1.它也不会跳过初始空白字符。

%s:匹配一串非空白字符。 它跳过并丢弃最初的 空格,但在阅读某些内容后遇到更多空白时停止。 [这个条款应该解释你所看到的行为。 ]

1

无法理解问题,但scanf忽略所有空白字符。 n是一个空白字符。如果你想检测用户何时按下输入,你应该使用fgets。

fgets(str, 10, stdin); 
+0

sry for bad eng :(我认为我应该用'get'而不是'retrieve'这个词,我只是混淆了意思。 – Jaebum