我希望程序从输入文件input.txt中读取,识别每个单词,并将每个单词保存为数组中的字符串,名为A.
我试过跟随其他建议无济于事,我当前的代码可以打印出数组中的每个单词,但似乎将单词保存到数组中的每个项目,而不只是一个。
非常感谢任何帮助。
示例输入文件:
Well this is a nice day.
当前输出:
Well
this
is
a
nice
day.
This output should be the first word, not the last: day.
我的代码:
#include <stdio.h>
const char * readInputFile(char inputUrl[]) {
char inputLine[200];
char inputBuffer[200];
const char * A[1000];
int i = 0;
FILE *file = fopen(inputUrl, "r");
if(!file) {
printf("Error: cannot open input file.");
return NULL;
}
while(!feof(file)) {
fscanf(file,"%[^ \n\t\r]",inputLine); // Get input text
A[i] = inputLine;
fscanf(file,"%[ \n\t\r]",inputBuffer); // Remove any white space
printf("%s\n", A[i]);
i++;
}
printf("This output should be the first word, not the last: %s\n", A[0]);
fclose(file);
}
int main() {
readInputFile("input.txt");
return(0);
}
答案 0 :(得分:0)
您复制到数组的每个元素的实际上是inputLine指向的字符串的地址。循环的每次迭代都会更改指向的字符串,并且所有数组元素都指向相同的字符串。
您需要通过分配内存空间来保存它(malloc)然后将其逐字复制到新位置(strcpy)来创建字符串的副本...
[edit]您可能还想在复制之前从字符串中删除空格;)[/ edit]
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
const char * readInputFile(char inputUrl[]) {
char inputLine[200];
char inputBuffer[200];
char * A[1000];
int i = 0;
FILE *file = fopen(inputUrl, "r");
if(!file) {
printf("Error: cannot open input file.");
return NULL;
}
while(!feof(file)) {
fscanf(file,"%[^ \n\t\r]",inputLine); // Get input text
A[i] = malloc(strlen(inputLine)+1);
strcpy(A[i], inputLine);
fscanf(file,"%[ \n\t\r]",inputBuffer); // Remove any white space
printf("%s\n", A[i]);
i++;
}
printf("This output should be the first word, not the last: %s\n", A[0] );
fclose(file);
}
int main() {
readInputFile("input.txt");
return(0);
}