多行上的C ++字符串打印

时间:2017-06-27 04:59:16

标签: c++ visual-studio output

我一直在尝试使用C ++,但我甚至无法让最简单的编程为我工作。

while(true) {
    cout << "."
    string in;
    cin >> in;

    cout << "!" << in
}

我希望得到的东西:

.1
!1
.1 2
!1 2

我实际上得到了什么:

.1
!1
.1 2
!1.2

2 个答案:

答案 0 :(得分:1)

如果你想读取整行,那么直接在std::cin上格式化输入就不是了。请改用std::getline

大致相同:

#include <string>
#include <iostream>

int main() {
  while(true) {
    std::cout << "."
    std::string in;
    getline(std::cin, in);

    std::cout << "!" << in << '\n';
  }
}

答案 1 :(得分:1)

cin是从标准输入读取的流,可能不会以您期望的所有方式运行。提取运算符>>从cin读取直到达到空格,因此cin >> cmd仅将cmd设置为等于命令中的第一个单词。其余的单词仍然是cin,所以在程序打印后

> test

它再次循环,提示输入,并从cin读取test2,而不是允许您向流中添加其他内容。

如果您想阅读整行,请使用getline。

#include <string>
using std::string;
#include <iostream>
using std::cin; using std::cout; using std::getline;

int main() {
  while (true) {
    cout << "\n\n";
    cout << "[CMD] > ";
    string cmd;
    // Store the next line, rather than the next word, in cmd
    getline(cin, cmd);

    cout << "> " << cmd;
  }
}

这可以按照您的预期执行:

[CMD] > test
> test

[CMD] > test test2
> test test2

[CMD] >