c++ 带字符串的输入流

pod7payv  于 2023-01-15  发布在  其他
关注(0)|答案(1)|浏览(162)

如果在提示输入字符时输入john,while语句将循环4次,每次循环代表john的每个字母,然后再次要求用户输入。
为什么这个程序不允许我在john的4个字符用完之前插入更多的输入呢?我希望它丢弃字符串john剩下的3个字母,并要求我在第二个循环中输入更多的内容。
整个例子可以在Bjarne Stroustrup The C++编程语言第4版的第44页找到。

#include <iostream>
using namespace std;

bool question() {
  while (true) {
    cout << "Continue ?\n";
    char answer = 0;
    cin >> answer;
    cout << "answer: " << answer << endl;
  }
  return false;
}

int main () {
  cout << question() << endl;
}

输出变为:

Continue ?
john
answer: j
Continue ?
answer: o
Continue ?
answer: h
Continue ?
answer: n
Continue ?
kb5ga3dv

kb5ga3dv1#

您可能会想,为什么不允许在每个提示符处输入一个字符,因为您已经在输入流中输入了四个字符,所以循环运行四次以消耗所有输入。
如果您只想使用输入中的第一个字符,那么您可能希望获得整行并只处理第一个字符。

#include <iostream>
#include <string>

bool question() {
  while (true) {
    std::cout << "Continue ?\n";
    std::string line;
    std::getline(std::cin, line);
    std::cout << "answer: " << line[0] << endl;
  }
  return false;
}

当然,您还应该检查没有输入空行,这可能就像检查line[0]是否不是'\0'一样简单。

相关问题