如何在按下回车键时退出程序
How to exit program on press of return key?
我正在用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::string
:string 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
来获取整个字符串。。。
- 为什么异常不退出程序?
- 虽然循环在使用回车键时不退出程序
- 如果 I/O read() 处于阻塞阶段,如何使用 Ctrl+C 退出 C++ 程序?
- 捕获异常后如何退出程序执行
- 在C++中使用exit()退出程序有问题吗
- 从函数打印 CLI 帮助消息后,我应该如何干净地退出 C++ 程序?
- 如何实现否定用户输入退出程序和打印列表?
- gdb 退出:程序接收信号 SIGILL,使用 gcc / intel_mkl / gfortran -mavx 编译的
- 试图调节我的 do-while 以停止在终端中退出程序.菜单不会根据需要循环使用当前语句
- 如何在C 中按ENTER/返回键时退出程序循环
- 退出程序,默认开关
- 我想让程序保持运行,直到用户输入 n 退出程序
- 我找不到第一个用户输入后立即退出程序的原因
- 安全地退出程序 Win32 C++从分离的 std::线程
- 如何使用QCloseEvent退出程序
- 在主之前退出程序是明确的行为吗?
- C++键盘挂钩-退出程序,但也防止密钥在其他地方被处理
- 在类中运行析构函数时退出程序
- 由于删除 [] 而未退出程序
- 输出缓冲区和Cntrl+C以退出程序