2017-05-15 53 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

噢,如果我很抱歉 –