使用fscanf()从文件中读取文本

-2 c file scanf feof

伙计们,我想从我的文件中读取文本,并将每个字符分配给数组的单个元素

char A[1000];

FILE * fpointer;
fpointer=fopen("text.txt","r");

i=0;
while(!feof(fpointer))
{
    fscanf(fpointer,"%c",&A[i]);
    i=i+1;
}

fclose(fpointer);

for (i=0;i<100;i++)
{
    printf("%c",A[i]);
}

return 0;
Run Code Online (Sandbox Code Playgroud)

但问题是输出是一些奇怪的符号而不是文件的文本,这是"这只是一个测试".为什么会发生这种情况?

Spi*_*rix 5

可能的原因包括:

  1. fopen无法打开指定的文件.通过检查返回值来修复fopen.
  2. 看看为什么"while(!feof(file))"总是错的?
  3. 您总是打印100个字符,但如果文件包含少于100个字符,则会遇到问题,因为您打印的是未初始化的阵列位置,从而导致UB.通过打印从零开始的所有内容进行修复i.

更正的代码段:

int i = 0, j = 0;
char A[1000];

FILE* fpointer;
fpointer = fopen("text.txt", "r");
if(!fpointer)
{
    fputs("fopen failed! Exiting...\n", stderr);
    exit(-1); /* Requires `stdlib.h` */
}

while(fscanf(fpointer, "%c", &A[i]) != EOF)
{
    i = i + 1;
}

fclose(fpointer);
for (j = 0; j < i; j++){
    printf("A[%d] = '%c'\n", j, A[j]);
}
Run Code Online (Sandbox Code Playgroud)