scanf在缓冲区中保留\ n字符

时间:2018-11-12 13:43:23

标签: c scanf

我是C语言的新手,我想用integers读6 scanf。但是,我注意到并读到scanf离开了\n字符(我在格式字符串中有一个缓冲区),从而“读取”了用户的额外输入。在各种堆栈文章中,我读到可以通过在%d格式前面添加空格(例如:{{ 1}}但这对我不起作用。我应该怎么做以及为什么会发生这种情况?

这是我当前的代码:

scanf(" %d\n",&var);

2 个答案:

答案 0 :(得分:2)

格式字符串中的\n实际上引起了问题。读取整数后,格式字符串中的\n可以匹配任意数量的空格字符,因此该函数在输入一些非空格字符之前不会返回。

按如下所示更改格式字符串:

scanf("%d", &A[i][j]);

%d格式说明符隐式丢弃任何前导空格字符,因此不需要前导空格(仅%c才需要)。

答案 1 :(得分:1)

%d忽略数字前的空格。仅当您使用%d读取一个数字(它将换行符留在缓冲区中)并且之后想要使用%c读取一个字符时,才有此问题。在那里,您必须在%c之前放置一个空格,以便它将忽略缓冲区中的换行符。

如果您只想阅读数字,则可以使用scanf("%d", &var);