如何在按下回车键时退出程序

How to exit program on press of return key?

本文关键字:退出程序 回车      更新时间:2023-10-16

我正在用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;   
}

您不需要像这样初始化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): ";
}

希望这能有所帮助。

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

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

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

我不建议将cin >>用于交互式程序。它的行为是定义明确的,但对于用户类型的输入来说往往是出乎意料的。相反,使用类似的东西

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

这将一直等到用户键入一堆内容并按Enter键,而不会出现诸如在流中缓冲数据等奇怪行为。

问题是,当请求字符串时,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来获取整个字符串。。。