具有多个单词

时间:2015-11-30 20:16:16

标签: c string function scanf

我现在已经在 C 编程了很长一段时间了,关于函数scanf()

还有这个问题

这是我的问题:

  

我知道ASCII表中的每个元素都是一个字符,我甚至知道%s是为字符串指定的数据,这是一个字符集合

我的问题:

1.我们按Enter后为什么scanf()会停止扫描。如果输入也是字符,为什么它不能被添加为正在扫描的字符串的组件。

2.我的第二个问题和我最需要的是为什么它会在一个空格之后停止扫描,当空间又是一个角色时?

  

注意:我的问题不在于如何避免这些,而是​​如何发生这种情况

如果已经解决这个问题,我会感到高兴,我很乐意删除我的问题,即使我认为有问题,请告诉我

3 个答案:

答案 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()
  1. 扫描并使用包含从多个 输入生成的char buffer[100]; scanf("%s", buffer); 的所有空白区域。此数据未保存。
  2.   

    除非规范包含'\n'isspace[说明符C11dr§7.21,否则将跳过输入空白字符(由c函数指定) .6.2 8

    1. 扫描并保存所有非空白字符。继续这样做,直到遇到白色空间。
    2.   

      匹配一系列非空白字符§7.21.6.212

      1. 此空白区域将重新放入n以获取下一个输入功能。 (OP的第二个问题)
      2. 空字符附加到stdin
      3. 如果发生EOF,操作可能会停止。
      4. 如果buffer中保存的数据太多,则为UB。
      5. 如果保存了一些非空白数据,则返回1.如果遇到EOF,则返回EOF。
      6. 注意:buffer通常是行缓冲的,因此在发生stdin之前,不会向stdin提供键盘数据。

答案 1 :(得分:2)

在我阅读你的问题时,你的两个问题都是一样的:

  

为什么格式说明符为scanf的{​​{1}}在遇到空格或换行符后会停止阅读。

这两个问题的答案是:因为这是%s格式说明符scanf所记录的内容。

来自the documentation

  

%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); 效果很好。