2016-06-20 29 views
0

documentation on scanf表示格式中的任何“非空白字符”会导致该函数从流中读取下一个字符,将其与该非空白字符进行比较,如果匹配,则将其丢弃并继续执行格式的下一个字符。 如果字符不匹配,则函数失败,返回并保留未读取的流的后续字符。为什么scanf不遵循非空白字符的文档?

但是,如果我运行:

int x; 
while(scanf("\n%d",&x)==1) printf("%d\n",x); 

具有以下输入:

1 2 

它打印:

1 
2 

既然没有 '\ n' 之前的任何在这两个数字中,为什么scanf会读取它们?这不是针对文档吗?

+5

换行符被认为是空白并被scanf忽略。 –

+1

您是否阅读过关于scanf如何处理格式中的空格的部分? – user2357112

+0

谢谢你,明白了。空格字符部分不仅包含,还包含任何包含新行的“空白字符”。我如何将问题标记为已解决? –

回答

5

在您关联,只是你引用段落前,我看到相同的页面:

  • 空白字符:功能将读取并忽略以前遇到的任何空白字符下一个非空白字符(空白字符包括空格,换行符和制表符 - 请参阅isspace)。 格式的单个空格字符串验证从(包括无)中提取的任何数量的空白字符。

A \n是一个空白字符。

因此,调用

scanf("\n%d",&x) 

将提取和数据读入&x之前丢弃任何数量的从stdio空格字符。

相关问题