2017-03-18 52 views
0

我想創建一個文本文件,以便第一次運行密碼並使用代碼檢查整個字符串以查找以前輸入的密碼。 即使沒有輸入完整的密碼,當前的代碼也會返回前幾個字母的真值。使用特定的字符串創建一個文本文件並使用它來進行比較

int Manager::ManagerView1() 
    { 
    Passwordsearch: 
    system("cls"); 
    string search; 
    int offset,ErrorVar; 
    string line; 
    ifstream Myfile; 
    Myfile.open("Password.txt"); 

    cout << "Enter your Password :\n"; 
    cin >> search; 
    if (Myfile.is_open()) 
    { 
     while (!Myfile.eof()) 
    { 
     getline(Myfile,line); 
     if ((offset = line.find(search, 0)) != string::npos) 
     { 
      cout << "Password Accepted ..\n"; 
      system("pause"); 
     } 
     else 
     { 
      cout << "Password Incorrect. \nPress\n 1.) Go back to the main  screen\n 2.) Re-Enter Password \n"; 
      cin >> ErrorVar; 
      if (ErrorVar == 1) 
      { 
       system("PAUSE"); 
       return 1; 
      } 
      else if (ErrorVar == 2) 
      { 
       system("PAUSE"); 
       system("cls"); 
       goto Passwordsearch; 
      } 
      else 
      { 
       cout << "Wrong option !! Please try again\n"; 
       system("PAUSE"); 
       return 1; 
      } 
     } 
     } 
     } 
     } 

這是我想從檢查字符串密碼文件: enter image description here

+0

請仔細閱讀[爲什麼的iostream :: EOF裏面算錯了一個循環條件?(http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-考慮-錯誤的)。 –

回答

0

你的問題是因爲如何find功能工作。它看起來包含在search子串

你要提取的文件完整密碼,然後用比較平等的,而不是隻是在尋找一個子串。

+0

我感謝您的快速回復。我其實位於C初學者++,所以如果你能告訴我該怎麼做它到底會有幫助 –

+0

@AbhikRay不行,我不能告訴你,因爲我不知道該文件或其格式的內容。 –

+0

好的,所以文件Password.txt的內容是(「匿名」),當我在命令窗口中輸入匿名它說密碼 –

0

當您使用string.find(param1, param2)它只是告訴你,如果在這種情況下,「無名氏」的字符串確實包含你把爲查找()函數內的第一paramater文本。

如果你想避免,你不應該使用*find()*可言。 相反,你應該做比較。

首先你閱讀TXT文件中的字符串,並將其存儲在一個string line。然後你要求用戶在輸入密碼後輸入密碼,然後檢查你的字符串是否與密碼一致。

std::string my_pass = "Anonymous";//Get it from file. 
std::string input_pass = ""; 
std::cin >> input_pass; 

if(input_pass==my_pass){ 
    std::cout << "PASSWORD CORRECT\n"; 
} 
相關問題