我是C语言的新手,我想用integers
读6 scanf
。但是,我注意到并读到scanf
离开了\n
字符(我在格式字符串中有一个缓冲区),从而“读取”了用户的额外输入。在各种堆栈文章中,我读到可以通过在%d格式前面添加空格(例如:{{ 1}}但这对我不起作用。我应该怎么做以及为什么会发生这种情况?
这是我当前的代码:
scanf(" %d\n",&var);
答案 0 :(得分:2)
格式字符串中的\n
实际上引起了问题。读取整数后,格式字符串中的\n
可以匹配任意数量的空格字符,因此该函数在输入一些非空格字符之前不会返回。
按如下所示更改格式字符串:
scanf("%d", &A[i][j]);
%d
格式说明符隐式丢弃任何前导空格字符,因此不需要前导空格(仅%c
才需要)。
答案 1 :(得分:1)
%d
忽略数字前的空格。仅当您使用%d
读取一个数字(它将换行符留在缓冲区中)并且之后想要使用%c
读取一个字符时,才有此问题。在那里,您必须在%c
之前放置一个空格,以便它将忽略缓冲区中的换行符。
如果您只想阅读数字,则可以使用scanf("%d", &var);
。