簡體   English   中英

如何將EOF(文件結尾)放在code :: blocks中?

[英]How to put EOF(end of file ) in code::blocks?

#include <iostream>

using std::cout;
using std::cin;
using std::endl;

int main()
{
    int grade,
        aCount = 0,
        bCount = 0,
        cCount = 0,
        dCount = 0,
        fCount = 0;

    cout << "Enter the letter grades." << endl
        << "Enter the EOF character to end input." << endl;

    while ( ( grade = cin.get() ) != EOF ) {

        switch ( grade ) {

            case 'A':
            case 'a':
                ++aCount;
                break;

            case 'B':
            case 'b':
                ++bCount;
                break;

            case 'C':
            case 'c':
                ++cCount;
                break;

            case 'D':
            case 'd':
                ++dCount;
                break;

            case 'F':
            case 'f':
                ++fCount;
                break;

            case '\n':
            case '\t':
            case ' ':
                break;

                    default:
                        cout << "Incorrect letter grade entered."
                            << " Enter a new grade." << endl;
                        break;

        }
    }    

    cout << "\n\nTotal for each letter grade are:"
         << "\nA: " << aCount
         << "\nB: " << bCount
         << "\nC: " << cCount
         << "\nD: " << dCount
         << "\nF: " << fCount << endl;

                return 0;
}    

我構建並運行它,它在第19行(即帶有while標頭的行)顯示“尚未聲明EOF”。 我一一鍵入確切的代碼。

EOF宏在cstdio定義,但是使用C ++風格的IO通常比使用C風格的IO更好。 與其檢查返回值是否為EOF ,不如檢查cin.eofbit (或者,由於其他問題,可能是cin.failbit ),所以cin.failbit 您可以通過嘗試將其評估為bool來檢查流的failbit ,如下所示。

如果將for循環替換為while循環,則為

for (char grade = cin.get(); cin; grade = cin.get()) {

它應該更好地工作(在這種情況下,您也應該擺脫最初的grade聲明,因為它僅在循環中使用,並且應該在其中聲明)。

編輯:

這可以進一步簡化。 get方法支持傳遞字符引用,因此您可以調用cin.get(grade)而不是grade = cin.get() 這樣做的好處是,在傳遞字符引用時, get返回流的副本,因此您可以同時進行讀取和檢查狀態。 使用此方法,您需要提前聲明grade ,但是循環可以從以下開始

while (cin.get(grade)) {
while ( ( grade = cin.get() ) != EOF ) {

在上面的行中,您僅將成績作為輸入。 EOF也應該有一個cin.get() ,除非它不起作用。 執行此操作時,您需要首先將EOF聲明為char,如上一行所示,比較是在兩個字符之間進行的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM