C++ For循环中特定行的非预期迭代
不要担心代码的用途。但我会把它贴在下面以供参考:C++ For循环中特定行的非预期迭代,c++,C++,不要担心代码的用途。但我会把它贴在下面以供参考: #include<iostream> #include<string> using namespace std; int main() { int numberOfStudents; cout << "Please enter the number of students in the class:\n "; cin >> numberOfStudents;
#include<iostream>
#include<string>
using namespace std;
int main()
{
int numberOfStudents;
cout << "Please enter the number of students in the class:\n ";
cin >> numberOfStudents;
string temporaryname,
realname;
for (int count = 0; count < numberOfStudents; count++)
{
cout << "Please enter the name of the student";
getline(cin, temporaryname);
if (temporaryname == temporaryname);
else if (temporaryname < realname)
{
realname = temporaryname;
}
}
cin.get();
cin.get();
return 0;
}
参见重复的“请输入学生姓名”?它为什么这样做?我一点也不知道为什么它会重复同一句话。还要注意,我是一个初学者C++程序员。请保持你的解释简单。在这句话之后
cin >> numberOfStudents;
if (temporaryname == temporaryname);
新行字符仍在输入缓冲区中
下一个读取函数
getline(cin, temporaryname);
读取缓冲区,直到它遇到此新行字符
您应该在循环之前使用成员函数ignore
,以便在使用getline之前忽略缓冲区中的所有字符。
比如说
#include <limits>
//...
std::cin.ignore( std::numeric_limits<std::streamsize>::max() );
没有意义。大声读出代码,包括循环。这将显示您的错误。实现问题属于StackOverflow。如果您碰巧在StackOverflow上被禁止提问,请不要在这里问实现问题,试图绕过禁令。这样做只会添加到不允许再问的站点中代码>请参阅。这是一个非常小的程序;除非您不明白分支、循环和
是如何工作的,否则您应该能够发现问题所在。如果你还是看不到,那就慢一点。顺便说一句,我们这么说并不是为了对你刻薄。您需要弄清楚如何在程序仍然很小的时候进行调试,否则当程序变大时,您将无望地迷失方向。条件始终为true的if语句将不会启动任何迭代。您应该解决if(temporaryname==temporaryname)代码>这是一个编译错误?那是因为分号前没有语句吗?OP似乎表明此代码实际执行(尽管不正确)。@Robert Harvey噢,我没有注意到。@Vlad,来自莫斯科,成员函数cin.ignore()是问题的解决方案。我认识到if(temporaryname==temporaryname)语句是错误的,因为它总是正确的代码>没有意义。
if (temporaryname == temporaryname);