2016-05-07 11 views
-2

ребят я хочу, чтобы прочитать текст из моего файла и присвоить каждый символ к одному элементу массиваЧтение текста из файла с помощью fscanf()

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; 

но проблема в том, что выход какой-то странный символы вместо текста файла, который является «Это просто тест». Почему это происходит?

+0

Как определяется 'А'? – fluter

+0

Вы сожалеете, что включили его: D. char A [1000]; i также определяется как int. – hfsocio

ответ

5

Возможные причины включают в себя:

  1. fopen не удалось открыть указанный файл. Исправьте, проверив возвращаемое значение fopen.
  2. См Why is “while (!feof (file))” always wrong?
  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]); 
} 
+0

добавления INT переменной к сделал это время { fscanf (fpointer, "% С", &A[i]); I = I + 1 (feof (fpointer)!); к = я; , а затем вместо 100 я использовать k Кажется, работает. Спасибо !!! – hfsocio

+0

Да, это тоже сработает. Но убедитесь, что вы позаботились о точках 1 и 2 в моем ответе. –

+0

Я буду благодарен за отзыв! – hfsocio

1

Для расширения на points by @Cool Guy:

В случае, если ваши файлы не содержат null character, вы можете не использовать другую переменную для хранения количества прочитанных символов , Если вы завершите свое чтение символами, вы можете просто напечатать их напрямую в виде строки.

Вы должны убедиться, что A может содержать достаточно символов. Если вы ожидаете не более 1000 символов, убедитесь, что A имеет размер 1001 байт, чтобы содержать завершающий символ NUL.

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

int main(int argc, char **argv) 
{ 
    char A[1001] = { 0 }; /* init to NUL, expect at most 1000 chars */ 
    int i;  
    FILE *fpointer; 

    fpointer=fopen("text.txt","r"); 
    if(!fpointer) { 
     perror("Error opening file"); /* print error message */ 
     exit(-1); /* Requires `stdlib.h` */ 
    } 
    /* read all characters from fpointer into A */ 
    for (i=0; fscanf(fpointer, "%c", &A[i]) != EOF; i++); 
    fclose(fpointer); 

    printf("%s\n",A); /* print all characters as a string */ 

    /* alternatively, loop until NUL found */ 
    for (i=0; A[i]; i++) 
     printf("%c", A[i]); 
    printf("\n"); 

    return 0; 
}