我现在已经在 C 编程了很长一段时间了,关于函数scanf()
这是我的问题:
我知道ASCII表中的每个元素都是一个字符,我甚至知道%s是为字符串指定的数据,这是一个字符集合
我的问题:
1.我们按Enter后为什么scanf()
会停止扫描。如果输入也是字符,为什么它不能被添加为正在扫描的字符串的组件。
2.我的第二个问题和我最需要的是为什么它会在一个空格之后停止扫描,当空间又是一个角色时?
注意:我的问题不在于如何避免这些,而是如何发生这种情况
如果已经解决这个问题,我会感到高兴,我很乐意删除我的问题,即使我认为有问题,请告诉我
答案 0 :(得分:3)
“为什么scanf()在我们按回车后停止扫描。”并非总是如此。
// Creating an empty array list
ArrayList<String> list = new ArrayList<String>();
// Adding items to arrayList
list.add("Item1");
list.add("Item2");
指示"%s"
如下
scanf()
char buffer[100];
scanf("%s", buffer);
的所有空白区域。此数据未保存。除非规范包含
'\n'
,isspace
或[
说明符C11dr§7.21,否则将跳过输入空白字符(由c
函数指定) .6.2 8
匹配一系列非空白字符§7.21.6.212
n
以获取下一个输入功能。 (OP的第二个问题)stdin
。buffer
中保存的数据太多,则为UB。注意:buffer
通常是行缓冲的,因此在发生stdin
之前,不会向stdin
提供键盘数据。
答案 1 :(得分:2)
在我阅读你的问题时,你的两个问题都是一样的:
为什么格式说明符为
scanf
的{{1}}在遇到空格或换行符后会停止阅读。
这两个问题的答案是:因为这是%s
格式说明符scanf
所记录的内容。
%s
匹配不是空格字符的字节序列。
空格和换行符(由回车键生成)是空格字符。
答案 2 :(得分:-1)
我用 scanf 制作了一个小程序,用于获取多个名称而不会在空间上停留或进入。 我用while
Scanf("%s",text);
While (1)
{
Scanf("%s",text1)
If (text1=='.'){break;}
//here i simple add text1 to text
}
这样,如果使用 . 现在我用 scanf("%[^\n]",text); 效果很好。