首頁 >後端開發 >C++ >為什麼「cin.ignore()」對於 C 中數字輸入後正確的字串輸入至關重要?

為什麼「cin.ignore()」對於 C 中數字輸入後正確的字串輸入至關重要?

Susan Sarandon
Susan Sarandon原創
2024-12-10 18:16:12614瀏覽

Why Is `cin.ignore()` Crucial for Correct String Input After Numerical Input in C  ?

解開C 中cin.ignore() 之謎

在C 程式中與使用者互動時,可能會出現意外狀況,例如跳過字串輸入出現。看似無害的 cin.ignore() 呼叫是解決如此令人困惑的問題的關鍵。

為什麼cin.ignore() 至關重要

當使用者輸入數字時後跟一個字串,按Enter 鍵會將換行符('n') 插入輸入緩衝區。隨後,cin>>數量;消耗數字但將「n」字元保留在緩衝區中。當 cin.ignore() 不存在時,cin >>>取得行(cin,mystr);無意中讀取了「n」字元而不是字串輸入。

cin.ignore() 函數透過忽略指定數量的字元(在我們的範例中為 256)或直到遇到分隔符號('在這種情況下)。

預測需要cin.ignore()

預測何時需要 cin.ignore() 需要了解輸入緩衝區中剩餘字元的可能性。它變得至關重要的情況包括:

  • 讀取數字後(例如cin >> num;)
  • 當後續輸入是字串時(例如cin >> num ;) getline(cin, mystr);)
  • 當輸入包含非分隔符號時,可能會無意中重新吸收

範例:深入研究程式碼

考慮提供的C 程序:

#include <iostream>
#include <string>

using namespace std;

int main()
{
    double num;
    string mystr;

    cout << "Please enter a number: " << endl;
    cin >> num;
    cout << "Your number is: " << num << endl;
    cin.ignore(256, '\n'); // Ignore any remaining characters
    cout << "Please enter your name: \n";
    getline (cin, mystr);
    cout << "So your name is " << mystr << "? \n";
    cout << "Have a nice day. \n";

}

插入cin.ignore( ) 在cin之後調用 >>數量;確保忽略“n”字符,從而允許後續的 cin >>獲取行(cin,mystr);正確讀取字符串輸入。

以上是為什麼「cin.ignore()」對於 C 中數字輸入後正確的字串輸入至關重要?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn