[英]Why does fgetc not stop at eof
假設我有input.txt
,其中包含“123456789”。 我正在嘗試使用fputc
和fgetc
將奇數寫入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.