簡體   English   中英

如何停止從C中的文件讀取

[英]how to stop reading from file in C

我只是想讀取文件的每個字符並將其打印出來,但是當文件完成閱讀時,但我得到了一堆? 完成閱讀后。 我如何解決它?

#include <stdio.h>

int main(void){
    FILE *fr;            /* declare the file pointer */

    fr = fopen ("some.txt", "r");  /* open the file for reading */
        /* elapsed.dta is the name of the file */
        /* "rt" means open the file for reading text */
    char c;
    while((c = getc(fr)) != NULL)
    {
        printf("%c", c);
    }
    fclose(fr);  /* close the file prior to exiting the routine */
    /*of main*/ 


    return 0;
}

盡管它的名稱, getc返回一個int ,而不是一個char ,因此它可以表示所有可能的char值,此外還有EOF (文件末尾)。 如果getc返回了一個char ,那么在沒有使用文件中可能存在的值之一的情況下,將無法指示文件的結尾。

因此,要修復代碼,必須先更改聲明char c; int c; 這樣它可以在返回時保持EOF標記。 然后,您還必須更改while循環條件以檢查EOF而不是NULL

你也可以調用feof(fr)來單獨測試文件結尾來讀取字符。 如果你這樣做了,你可以把c feof() char ,但是你必須在讀完字符之后但是在打印出來之前調用feof() ,並使用break來擺脫循環。

如果不成功, fgetc()將返回EOF。

int c;
while ((c = getc(fr)) != EOF) 
{ 
    printf("%c", c); 
}

fgetc()在文件結尾返回EOF ,而不是NULL

將“NULL”替換為“EOF”。

改變這個

char c;
while((c = getc(fr)) != NULL)
{
    printf("%c", c);
}

char c;
int charAsInt;
while((charAsInt = getc(fr)) != EOF)
{
     c = (char) charAsInt;
     printf("%c", c);
}

換句話說:您需要與EOF進行比較,而不是NULL 您還需要使用int變量來從fgetc接收返回值。 如果使用char ,則與EOF的比較可能會失敗,並且您將返回到開始的位置。

其他人已經解決了你所遇到的問題,而不是使用printf("%c", c); 使用putchar(c);可能效率更高putchar(c); 當你要求printf打印一個字符時,會涉及相當多的開銷。

getc返回一個int

char c更改為int c

getc也會返回EOF ,將針對NULL的測試更改為針對EOF的測試

暫無
暫無

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

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