我刚刚开始学习 C++,并编写了这个简单的 while 循环程序:
#include <iostream>
#include <string>
int main() {
std::string Name;
while(Name.empty()){
std::cout << "\nEnter name: ";
std::getline(std::cin>>std::ws, Name);
}
std::cout << "Hello, " << Name;
return 0;
}
这意味着要求用户输入他们的名字,直到给出一个不为空的输入,但是当您向变量中输入一个空值而不是打印另一行“Enter name:”时,它只是将光标在终端内向下移动到另一行。
如何在每次 while 循环迭代时输出另一行“输入名称:”?
我尝试过使用 和
问题的基本解决方案是简单地从
>>std::ws
调用中删除 std::getline
部分。这使得它在按下 Enter 键后打印 Enter name:
字符串。
但是,这会认为纯粹由空格组成的名称是有效的,您必须检查这一点。如果你想剥离(修剪)字符串,可以使用 this 来实现一些方便的功能。
如果您想保持简单,请使用基本的 for 循环。
完整代码:
#include <iostream>
#include <string>
int main() {
std::string Name;
bool is_not_whitespace = true;
while (Name.empty() || is_not_whitespace) {
std::cout << "\nEnter name: ";
std::getline(std::cin, Name);
for (int i = 0; i < Name.length(); i++) {
const auto substring = Name.at(i);
if (substring != ' ') {
is_not_whitespace = false;
break;
}
}
}
std::cout << "Hello, " << Name;
return 0;
}
希望我能帮忙!