簡體   English   中英

為什么 fgetc 不在 eof 處停止

[英]Why does fgetc not stop at eof

假設我有input.txt ,其中包含“123456789”。 我正在嘗試使用fputcfgetc將奇數寫入odd.txt和將偶數寫入even.txt even.txt我沒有任何問題,但odd.txt包含“13579ÿ”。 我怎樣才能刪除這個ÿ? 為什么會這樣?

#include <stdio.h>
#define true 1

int main(void){

    FILE *fp = fopen("input.txt", "r+");
    FILE *odd = fopen("odd.txt", "w");
    FILE *even = fopen("even.txt", "w");
    
    char ch;
    while(true){
        ch = fgetc(fp); 

        if((ch - '0') % 2 == 0){//even
            fputc(ch, even);
        }
        else{//odd
            fputc(ch, odd);
        }

        if(feof(fp)){
            break;
        }
    }
    fclose(fp);
    fclose(odd);
    fclose(even);
    return 0;
}

問題是由發送EOF (aka -1) 到odd引起的。 當遇到輸入文件的結尾時, fgetc()會收到此 EOF 標記。

檢查一個數字是否被實際解析

   if('0' <= ch && ch <= '9') {
        if ((ch - '0') % 2 == 0) {
            fputc(ch, even);
        }
        else{//odd
            fputc(ch, odd);
        }
   } else {
        ... error
   }

此外,在處理ch之前檢查feof() ,或者將ch的類型更改為int以使其包含EOF值。 您可以使用在<ctype.h>中定義的isdigit()

循環可能如下所示:

    int ch;
    while ((ch = fgetc(fp)) != EOF) {
        if(isdigit(ch)) {
            if ((ch - '0') % 2 == 0) {
                fputc(ch, even);
            } else { //odd
                fputc(ch, odd);
            }
        } else {
            ... error ?
        }
    }

暫無
暫無

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

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