从文件中读取单词并将其放入数组

时间:2018-05-21 15:52:06

标签: c file

我想将文本文件中的单词读入数组。

为什么此代码适用于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 :(得分:2)

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

这将打印出[50]中每个指针的值。一旦你到达实际设置为指向某个东西的char指针,你只需打印掉指针本身的值。

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

会工作。

答案 1 :(得分:1)

我刚刚测试了Cowbolt的答案,它有效,并且还想问你为什么在输入词中有这一行():

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*/