【问题标题】:How to cout on same line as user input? C++如何与用户输入在同一行进行计算? C++
【发布时间】:2017-09-20 16:48:08
【问题描述】:

我想知道是否可以在用户输入的同一行上输出一些东西

int money;
cout << "How much money do you have?" << endl;
cin >> money;
//I want this to appear next to the user input
cout << " $";

我希望你明白我的意思,并希望你能提供帮助:)

编辑:如果这可能,我只是在徘徊,但似乎不是。至少不是标准的 c++,但感谢所有试图提供帮助的人

【问题讨论】:

  • 输入以回车键结束,如果没有回车,您将如何期望 i/o 知道何时完成输入整数?
  • 如果我没看错...你希望控制台显示How much money do you have?$
  • 您希望$ 出现在用户输入之前还是之后?
  • 不可能,输入流直到你按下回车键才被刷新(意思是,程序在回车之前不能读取任何输入)
  • @NathanOliver After

标签: c++ c++11


【解决方案1】:

问题是,当您读取用户的输入时,终端界面一直读取到用户按下 Enter 键时,并打印一个换行符,即光标移动到下一个终端行。然后你打印的任何内容都会出现在下一行。

在纯粹独立于平台的 C++ 中,您无法真正避免这种情况,因为它需要“在后台”操作输入流的文件描述符:

  • 使其不会一直读取到下一个换行符,或者
  • 让它不回显它读取的所有字符

(或两者兼有)。这可以在符合POSIX standard(s) 的系统上以标准方式完成——但这很复杂。您可以在this SO answer 中阅读更多相关信息;但底线是您应该使用库来执行此操作。之一:

应该适合你。

PS:有时您的输入不是终端而是文件,您可能还需要检查是否是这种情况。

【讨论】:

  • 对于 Windows,可以使用在德国 C++ 论坛 (c-plusplus.net/code/ic) 开发的 IC 库,因为多年来对 conio.h 的支持逐渐恶化。尽管是德语,界面应该是不言自明的。
【解决方案2】:

我想如果我没看错的话,你只需要把 $ 放在你的 cin 声明之前。

#include <iostream>

int main()
{
    int money;
    std::cout << "How much money do you have?" << std::endl;
    std::cout << "$";
    std::cin >> money;

    return 0;

}

然后它将在控制台上显示为
How much money do you have?
$(在此处插入输入)

【讨论】:

    【解决方案3】:

    如果您希望将$ 打印在输入money 值旁边,一种方法可以是向上移动一行并在输入并打印钱和$ 后删除用户输入行行。

    即可以这样做:

     int money;
     std::cout << "How much money do you have?" << std::endl; 
     std::cin >> money;
     std::cout << "\033[F";
     std::cout << money << " $";`
    

    这是Philipp Claßenanswer的引用

    似乎达到了目的:)

    【讨论】:

      【解决方案4】:

      明智地使用逗号运算符,您可以做任何事情。

      int money;
      std::cout << "How much money do you have?" << std::endl;
      std::cin >> money, std::cout << money << " $";
      

      将在一行上执行您的输入和输出。您甚至可以通过将std::endl; 上的分号更改为另一个逗号来在同一行上完成这三个操作。

      我猜这不是你想要的。您想直接使用 std::cin 的输出而不使用变量,对吗?您可以使用逗号运算符更进一步:

      int money;
      std::cout << "How much money do you have?" << std::endl;
      std::cout << (std::cin >> money, money) << " $";
      

      您也可以为此使用 lambda,但它的语法开销比我上面写的要大

      不幸的是,我不知道您可以摆脱格式化读取的两个步骤,然后返回变量,而无需使用某种序列运算符(如我所做的那样)或将步骤粘贴在函数中(例如:lambda) ,或使用一些非标准 C++ 的格式化 I/O 例程(这相当于同一件事)。问题是“>>”是用于格式化输入的 C++ 标准例程,并且该运算符旨在返回流,而不是读出的变量。

      【讨论】:

      • @StoryTeller - 这肯定不是第一次了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-26
      • 2014-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多