簡體   English   中英

C程序中的文件結尾(EOF)

[英]End of File (EOF) in C program

我編寫了一個簡單的C程序,需要在輸入EOF字符時完成(對於Windows則為Ctrl-Z ),並且應該打印:

  • 如果成績高於或等於5,則通過。
  • 如果成績高於或等於8,則通過高通考試。
  • 其他任何情況均失敗。

我使用getchar()作為用戶輸入(在這種情況下為等級)。

#include <stdio.h>

int main() {
    int grade;
    puts("Enter a grade\n");
    puts("Enter the EOF character to end input\n");

    while ((grade = getchar()) != EOF) {
        if (grade >= 5) {
            puts("Passed");
            if (grade >= 8) {
                puts("with High Pass\n");
            }
        } else {
            puts("Failed\n");
        }
    }
    return 0;
}

問題是程序沒有按照預期的方式運行,如果您能幫助我找到解決方案,我將不勝感激。

該程序無法正常運行,原因有兩個:

  • stdin讀取的字節不是數字值:如果用戶類型為1 ,則程序會收到字符值而不是數字值'1' 您可以通過減去字符值'0'來計算數字字符的數值:

     int c = getchar(); if (c >= '0' && c <= '9') { int grade = c - '0'; /* you can now test the grade */ 
  • 您一次讀取一個標准輸入:不允許等級超過9 如果用戶輸入10 ,則將測試2個等級並輸出Failed! 兩次。

這是帶有scanf()的替代版本:

#include <stdio.h>

int main(void) {
    int grade;
    puts("Enter the grades\n");
    puts("Enter the EOF character to end input\n");

    while (scanf("%d", &grade) == 1) {
        if (grade >= 8) {
            puts("Passed with High Pass");
        } else
        if (grade >= 5) {
            puts("Passed");
        } else {
            puts("Failed\n");
        }
    }
    return 0;
}

您會得到輸入數字的ASCII碼,而不是其值。 將其轉換為比較前的數字。

while ((grade = getchar()) != EOF) {
    getchar();  // flush the \n
    if (isdigit(grade))
    {
        int intgrade = grade - '0';

        if (intgrade >= 5) {
            puts("Passed");
            if (intgrade >= 8) {
                puts("with High Pass\n");
            }
        }
        else {
            puts("Failed\n");
        }
    }
    else printf("Wrong entry\n");
}

return 0;

暫無
暫無

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

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