如何按回车键退出程序?

时间:2012-02-11 19:03:36

标签: c++

我正在用C ++编写一个程序,它应该从用户那里获取一个输入字符串,打印它并要求用户再次键入另一个字符串并再次打印,直到用户按下返回键而不键入任何字符串。在这种情况下,程序应退出。

我想出了以下内容,但它没有按预期工作。有什么想法吗?

int main(){

    string surname;
    int c;
    while (true) {
        surname = "";
        cout << "Enter surname (RETURN to quit): ";
        c = cin.get();
        if (c == '\n') {
            break;
        }
        cin >> surname;
        cout << surname << endl;
    }
    return 0;   
}

4 个答案:

答案 0 :(得分:5)

您无需像这样初始化std::stringstring surname; surname = "";没有必要。

您可以使用getline函数,然后检查此字符串是否为empty,如下所示:

string surname;
cout << "Enter surname (RETURN to quit): ";
while (getline(cin, surname))
{
    if (surname.empty())
        break;
    cout << surname << endl << "Enter surname (RETURN to quit): ";
}

希望这有帮助。

答案 1 :(得分:2)

我会给你一些提示,这样我就不会为你解决问题,而是帮助你。

您不需要一次读取一个字符,您可以将每一行读入string变量。此外,您需要使用std::getline(std::cin, stringvariable)而不是cin >> stringvariable,因为后者将跳过所有换行符,直到它到达非换行符,因此按Enter键本身不会执行任何操作。

使用std::getline后,您可以通过比较字符串的长度为0或在其上调用empty来判断用户是否输入了任何内容。

答案 2 :(得分:2)

问题在于,当要求输入字符串时,iostream库将始终返回单个单词,忽略任何空格。这在大多数情况下非常有用。但是如果你想检测一个空字符串,你应该读一个字符,并检查它是否是一个新行字符:

while(true) {
  char c;
  string surname;
  cout << "Enter surname (RETURN to quit): ";
  cin.get(c)
  if(c == '\n') break;
  cin >> surname;
  if(c != ' ' and c != '\t' and c != '\n')
    surname.insert(0, c);
}
return 0;

请注意,如果名称长度为一个字符,则此解决方案存在一些问题。您可能需要使用cin.get来获取整个字符串...

答案 3 :(得分:2)

我不建议将cin >>用于交互式程序。它的行为定义明确,但对于用户输入的输入通常是意外的。相反,使用类似的东西:

std::getline(std::cin, surname);

这将一直等到用户键入一堆东西并按Enter键,而不会出现奇怪的行为,比如在流中缓冲数据以供日后使用。