我想将文本文件中的单词读入数组。
为什么此代码适用于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);
}
答案 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*/