2017-05-15 97 views
-3

我從教程關於C的fgets()複製下面的程序。它不會打印出文件的內容到終端:c:fgets功能讀取文件,但不打印到終端

#include <stdio.h> 
#include <stdlib.h> 

#define MAX_TEXT 1000 

int main(int argc, char *argv[]) 
{ 
    FILE *file = NULL; 
    char str[MAX_TEXT] = ""; 

    file = fopen("test.txt", "r"); 

    if(file != NULL) { 
     fgets(str, MAX_TEXT, file); 
     printf("%s", str); 
     fclose(file); 
    } 
    else { 
     printf("cannot read the file\n"); 
    } 

    return 0; 
} 

唯一的結果我得到的是信tt之前是一個小的透明正方形。

爲了您的信息,我在Windows上使用code :: blocks ide。以前的所有代碼片段(fputc()fputs() ...)都能正常工作。

+2

文件包含什麼內容? –

+0

無法重現。在問題中包含文本文件的內容。 –

+0

'fgets'不適合打印! – Olaf

回答

0

你的程序不費力氣找出文件中的內容並以合理的方式呈現它。因此,它使富文本變得混亂並不奇怪。現代的「文本」文件通常不僅僅是原始的ASCII字符,而是包含對寬字符,字節順序標記和其他各種事物的支持。

-2

由於您使用的是if語句,並且其分隔符是換行符(\ n),fgets在這裏只會執行一次。使用while循環並在循環後放置fclose語句來讀取所有行,如果那是您的目標。已經完成了一行,但輸出取決於文件的內容。

+2

OP僅嘗試讀取一行。無論如何,將'fclose'放在'if'塊之外如何提供幫助?如果'file'爲NULL,我們爲什麼要關閉這個文件 - 如果'fclose'被移動到'if'之外,可能會是這樣。這顯然不是問題。 – kaylum

+0

你說得對,'fgets()'只被調用一次,但它需要一個循環而不是'if'語句來重複。'fclose()'應該在循環之外。在問題的代碼中,'fclose()'不應該超出'if'子句,因爲如果文件沒有成功打開,'fclose()'可能會崩潰。 –

+0

噢,如果我很抱歉 –