的一個問題是分配給變量的內存量不足。例如,對於這些行:
char id[7];
cin.getline(id,7);
功能getline
可以讀取和從輸入存儲在空流高達字符終止 char數組id
,但隨後的程序具有比較該字符串至PLAYNOW
,即 chars long。
這會導致下一個問題,當getline在流中留下未讀字符時,失敗位置位,從而阻止進一步讀取。
修復這些,甚至與老標準,OP可以做這樣的事情:
const int ssize = 32; // enough space to store id or password
const int ssmax = 1024;
// big value... ^^ try std::numeric_limits<std::streamsize>::max() instead
char id[ssize],
pass[ssize];
cout << "Enter id: ";
cin.getline(id, ssize); // extract (ssize - 1) chars from input
if ( cin.fail()) {
cin.clear(); // if user entered more then ssize chars
cin.ignore(ssmax, '\n'); // clear the stream
}
同爲pass
(OP沒有通過8到第二函數getline,太)。
然後,包含預期ID和密碼的字符串的聲明是錯誤的。使用這些:
char idc[] = "PLAYNOW";
char passc[] = "PASSWORD";
最後幾行可能太改寫:
if (strcmp(id, idc) != 0 || strcmp(pass, passc) != 0)
exit(0);
cout << "Welcome. ";
cin.get();
return 0; // end of main()
順便說一句,我很肯定std::string小號屬於C++ 98,所以這應該工作太:
#include <iostream>
#include <string>
int main() {
std::string id, pass;
std::cout << "Enter id: ";
std::getline(std::cin, id);
std::cout << "Enter pass: ";
std::getline(std::cin, pass);
std::string idc("PLAYNOW");
std::string passc("PASSWORD");
if (idc != id || passc != pass)
exit(0);
std::cout << "Welcome. ";
return 0;
}
'char idc'請記住'char'是單個字符。也許你想'const char *'或更好的使用'std :: string'。 – drescherjm
其實很難相信這段代碼編譯的時候,strcmp不應該接受一個字符作爲參數 – pm100
***我需要在Turbo C++中編譯***確保你編寫了一些你花費一些時間學習現代的'C++'編譯器。 Turbo C++在25年前還不錯,但是在C++標準之前。從那以後很多事情改變了。 – drescherjm