我收到变量 "count" 未初始化的错误。但它应该在从文件中读取和验证数据后进行初始化。 C++

I am getting the error that variable "count" is not being initialized. But it should be initializing after reading and verifying data from file. C++

我正在开发 Login/Registration 系统。到目前为止,我得到的错误是变量“count”没有被初始化就被使用了。

bool count;
string userId, password, id, pass;
system("cls");
cout << "\t\t\n Please enter the username and password\n\n";
cout << "Username:";
cin >> userId;
cout << "Password:";
cin >> password;
//reads info from the file
ifstream readL("record.txt");
while (readL >> id >> pass) {
    if (id == userId && pass == password) {
        count = true;
    }
    else {
        count = false;
    }
}
readL.close();

if (count == true) {
    cout << userId << " your LOGIN is successfull.\n\n";
    main();
}
else {
    cout << "\nLOGING error\n\nPlease check your username and password\n\n\n";
    main();
}

我有代码的第二部分,同样的系统在这里工作。 `

case 1: {
        bool count;
        string suserId, sId, spass;
        cout << "\n\nEnter the username that you remember:";
        cin >> suserId;
        //reads the file
        ifstream f2("records.txt");
        while (f2 >> sId >> spass) {
            if (sId == suserId) {
                count = true;
            }
            else {
                count = false;
            }
        }
        f2.close();
        if (count == true) {
            cout << "\n\n\tYour account is found!\n\nYour password is " << spass << endl << endl;
            main();
        }
        else {
            cout << "\n\n\tSorry your account is not found." << endl << endl;
            main();
        }
        break;
}

`

唯一的区别是在第一种情况下它在 while if 语句期间读取两个变量,在第二种情况下仅读取用户名。 但是即使我在第一种情况下只读取用户名,错误仍然出现。

也许你应该用

初始化它
bool count = false;

您的 C++ 编译器足够聪明,可以判断出如果文件无法打开或为空,则 while 循环永远不会执行一次,并且 count 保持未初始化状态,直到其值为循环后检查。这就是你的 C++ 编译器告诉你的。

仅仅因为输入文件存在或不为空,并且其内容有效(因为其中的垃圾也会导致初始尝试读取失败)是无关紧要的。 count 在逻辑上可能在其值被使用时未初始化,因此编译器的诊断。

P.S。 while 循环的逻辑也存在致命缺陷,原因不同。但这与您询问的编译器诊断无关。