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);