Читать слова из файла и помещать их в массив - PullRequest
0 голосов
/ 21 мая 2018

Я хочу прочитать слова из текстового файла в массив.

Почему этот код работает с 2D-массивом (a[50][50]), а не с 1D-массивом (a[50])?

Этот код печатает то, что я хочу, но он также печатает некоторые другиебесполезные персонажи.Что вызывает это?

void inputwords(){
    int i=0;
    char wrd[50];
    FILE * fptr;
    char fname[20]="txt.file";

    fptr=fopen(fname,"w");
    if(fptr==NULL) {
        printf("error in opening file!");
        exit(1);
    }


    while(wrd!='\0'){
        fgets(wrd,sizeof wrd,stdin);
        fprintf(fptr,"%s",wrd);
        if(wrd[i]=='*' && wrd[i+1]=='*' && wrd[i+2]=='*' && wrd[i+3]=='*' && 
         wrd[i+4]=='T' && wrd[i+5]=='E' && wrd[i+6]=='L' && wrd[i+7]=='O' && 
         wrd[i+8]=='S') {
            break;
        }
   }
   fclose(fptr);
   return;      
}

void readfile(){
    FILE *fptr;
    char a[50][50];
    int i=0;
    char fname[20]="txt.file";

    fptr=fopen(fname,"r");

    while(fgets(a[i],50,fptr)){
        i++;
    }
   for(i=0;i<50;i++){
       printf("%s",a[i]);
   }
   fclose(fptr);
   return;
};

main(){
    inputwords();
    readfile();
    return(0);
}

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

Я только что проверил ответ Cowbolt, он работает, а также хотел спросить вас, почему у вас есть строка в inputwords ():

while(wrd!='\0') {

Условие нулевого символа никогда не произойдет от пользователявход.Лучше иметь четкие инструкции и сказать:

printf("Enter text (to finish input, type on a line of its own:****TELOS ):");
while (1) {    

/*be aware that your final i marks the position of string "****TELOS" */
/* so if you dont want it to output, have the n<i-1 in Cowbolt solution*/
0 голосов
/ 21 мая 2018
   for(i=0;i<50;i++){
       printf("%s",a[i]);
   }

Это распечатывает значение каждого указателя в [50].Как только вы достигнете указателей на символы, которые фактически указывают на что-то, вы просто распечатываете значение самого указателя.

   for(int n=0; n<i; n++){
       printf("%s",a[n]);
   }

Будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...