这是我的程序
#include <iostream>
using namespace std;
class Student
{
string name;
public:
Student(string input)
{
name = input;
}
Student()
{
name = "Unknown";
}
void get_name()
{
char c;
while (getline(cin, name))
{
for (int i = 0; i < name.length(); i++) {
c = name.at(i);
if (! ( ( c >= 'a' && c <= 'z' ) || ( c >= 'A' && c <= 'Z' ) || c==' ' || c=='\n') ) {
name = "Unknown";
}
}
}
}
void print_name()
{
cout << name << endl;
}
};
int main()
{
Student name;
name.get_name();
name.print_name();
return 0;
}
它正在接受来自标准输入的输入并正常工作,但不以任何方式来自终端。 我无法理解程序的这种行为。
终端输入不工作
https://i.stack.imgur.com/IyLRV.jpg
标准输入输入
答案 0 :(得分:0)
更改这一行:
while (getline(cin, name))
进入
if (getline(cin, name))
可能会按您的预期工作。你还没有打破循环,所以它总是在等待控制台输入。
或者您可以在控制台中发送 EOF
,请参阅此 question。
完整程序:
#include <iostream>
using namespace std;
class Student {
string name;
public:
Student(string input) { name = input; }
Student() { name = "Unknown"; }
void get_name() {
char c;
if (getline(cin, name)) {
for (int i = 0; i < name.length(); i++) {
c = name.at(i);
if (!((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == ' ' ||
c == '\n')) {
name = "Unknown";
}
}
}
}
void print_name() { cout << name << endl; }
};
int main() {
Student name;
name.get_name();
name.print_name();
return 0;
}
答案 1 :(得分:0)
void get_name()
{
char c;
getline(cin, name);
for (int i = 0; i < name.length(); i++)
{
c = name.at(i);
if (!((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == ' ' || c == '\n'))
{
name = "Unknown";
}
}
}
那里不需要while循环。如果你把它放在那里,那么它将永远接受输入。您可以使用循环并尝试打破它,但效率不高。