【问题标题】:How do I input variables using cin without creating a new line?如何在不创建新行的情况下使用 cin 输入变量?
【发布时间】:2013-02-19 00:03:15
【问题描述】:

每当我使用cin 输入变量时,点击输入后它会自动转到新行。我很好奇是否有办法使用cin 而无需换行。我想在命令提示符的同一行上 cincout 多个东西。这可能吗?

【问题讨论】:

  • @andre 当你按下回车键时,它应该保持在同一行。
  • 没有。这不是语言问题。这就是控制台窗口的工作方式。
  • 如何使用while循环检查是否输入了换行符(通过按回车键),如果它只是再次使用cin继续输入?
  • 大多数需要此功能的应用程序都使用特定于操作系统的功能来获取单个字符输入而不回显到输出。

标签: c++ windows visual-studio


【解决方案1】:

这是不可能的。引用@Bo Persson 的话,它不是由 C++ 控制的,而是控制台窗口。

【讨论】:

    【解决方案2】:

    我不认为你想做的事情可以用 cin 来实现。您可以做的是将所有输入写在一行中,并使用您选择的分隔符,然后解析输入字符串。

    【讨论】:

      【解决方案3】:

      正如其他人所指出的,您无法使用 cin 执行此操作,但您可以使用 getchar() 执行此操作。你需要做的是:

      1. 使用getchar() 单独收集每个字符(例如,在读入时将每个字符添加到string 的末尾),然后
      2. 读取每个字符后,决定何时到达一个变量值的末尾(例如,如果您正在读取intdouble 值,则通过检测输入中的一个或多个' ' 字符) , 然后
      3. 如果您已到达变量文本的末尾,请将您构建的字符串转换为适当类型的变量(例如intdouble 等),然后
      4. 将任何内容输出到可能需要的行上,然后
      5. 继续读取下一个变量。

      稳健地处理错误会很复杂,所以我没有为此编写任何代码,但您可以看到可以使用的方法。

      【讨论】:

      • 更正:当我看到 @Benjamin Lindley 的回答时,我尝试按照我的建议编写一些快速代码来使用 getchar() 执行此操作,但发现我做不到。无论我做了什么(例如刷新输出等),直到在输入行上按“Enter”后,我才能让输出写入,所以我不能在同一行上穿插输入和输出。
      【解决方案4】:

      您不能为此使用cin 或任何其他标准输入。但肯定有可能达到您想要的效果。我看到你在 Windows 上使用 Visual Studio,所以你可以使用,例如,_getch。这是一个读取到下一个空格并将结果存储在字符串中的示例。

      #include <conio.h> // for _getch
      
      std::string get_word()
      {
          std::string word;
          char c = _getch();
          while (!std::isspace(c))
          {
              word.push_back(c);
              std::cout << c;
              c = _getch();
          }
          std::cout << c;
          return word;
      }
      

      这不是很好。例如,它不能很好地处理非打印字符输入。但它应该让你知道你需要做什么。您可能还对Windows API keyboard functions 感兴趣。

      如果您想要更广泛的受众,您将需要研究一些跨平台库,例如 SFMLSDL

      【讨论】:

        【解决方案5】:

        您也可以使用空格代替输入 像这样:

        cin >> a >> b >> c;
        

        然后在输入中输入

        10 20 30
        

        然后

        a=10
        b=20
        c=30 
        

        【讨论】:

          【解决方案6】:

          只需使用 gotoxy 语句。您可以按“输入”并在同一行中输入值 例如。在 3*3 矩阵的输入中:

          #include<iostream.h>
          #include<conio.h>
          void main()
          {clrscr();
          int a[20][20],x,y;
          cout<<"Enter the matrix:\n ";
          for(int r=2;r<7;r+=2)
          for(int c=2;c<7;c+=2)
          {gotoxy(c,r);
          cin>>a[r][c];
          }
          getch();}
          

          【讨论】:

          • int main! :P 请各位大神说,你不会在现实世界中编写这样的代码。
          【解决方案7】:

          我无法发表评论,但如果您在整数之间留有空格,那么您可以获得所需的效果。这也适用于cin

          int a, b, c;
          cin>>a; cin>>b; cin>>c;
          

          如果您将值输入为10 20 30,那么它们将分别存储在 a、b 和 c 中。

          【讨论】:

            猜你喜欢
            • 2018-03-27
            • 2013-06-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-07-25
            相关资源
            最近更新 更多