【问题标题】:Possible to discard return character when using std::cin >>?使用 std::cin >> 时可能丢弃返回字符?
【发布时间】:2013-10-21 19:35:18
【问题描述】:

在c++中使用>>操作符捕获用户输入时,是否可以防止控制台打印用户按回车键时生成的换行符?

【问题讨论】:

  • 你能给我们举个例子来说明你的意思吗?在什么情况下打印新行?
  • 我不认为你可以阻止它,但你可以通过移动光标来处理它。
  • this 的副本

标签: c++


【解决方案1】:

您无法阻止newline 字符,因为当您使用cin 时,您正在与system core 通信,这是不受用户控制的。当您输入\nEOF 或其他异常情况时,console 将返回。 所以更好的方法是使用getchar()来捕获'\n',不要留在buffer中。

【讨论】:

    【解决方案2】:

    可以通过从键盘输入两个 EOF 而不是回车来防止这种换行行为。在控制台提示符下输入字符串后,点击

    CTRL-D, CTRL-D

    请注意,这是特定于平台的答案。这适用于我的 Mac,但在 Windows 操作系统上,EOF 序列可能是 CTRL-Z、RETURN。我将不胜感激编辑答案

    或者,您可以放弃 >> 运算符并使用 std::getline 之类的东西并指定精确的字符串终止分隔符。例如:

    std::string myString;
    std::getline(std::cin, myString, ';');
    std::cout << myString;
    

    这将从标准输入读取到myString,并将以NULL 字符结尾的字符串放在它找到第一个分号';' 的位置。然后你只需要按一次 CTRL-D(输入 EOF)。

    【讨论】:

      【解决方案3】:

      您可以输入值或每次按空格键输入。但最后你必须按回车键。
      假设:您要输入“5,4,3,2,1”
      你可以这样做:5 [enter] 4 [enter] 3[enter] 2[enter] 1[enter]
      另外:5[space]4[space]3[space]2[space]1[enter]
      但是如果你想在输入附近打印输出,你可以简单地先打印输入,然后再打印你想要的。
      示例:
      输入:3 输出:input+1
      所以你会这样做:

      cout<<input;
      cout<<" "<<input+1<<endl;
      

      祝你好运:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-02
        • 1970-01-01
        • 2016-12-23
        • 2015-12-16
        • 2022-09-27
        • 1970-01-01
        • 2010-09-14
        • 1970-01-01
        相关资源
        最近更新 更多