#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char passage[5000][20];
int wordnum;
char *getword(int x);
void readTextFile() {
FILE *fp;
//char buffer;
fp = fopen("data.txt", "r");
int i=1,j=1;
while (fscanf(fp,"%c", &passage[i][j]) != EOF){
if (passage[i][j] == '.' || passage[i][j] == ',' || passage[i][j] == '!' || passage[i][j] == '?' || passage[i][j] == ' '|| passage[i][j] == ';'){
i++;
j=1;
}else{
j++;
}
}
fclose(fp);
wordnum = i;
}
int main(){
readTextFile();
int i;
for (i=0;i<20;i++){
char *word = getword(i);
if (strlen(word)<= 0)
break;
printf("%d\n", strcmp(word,"am"));
printf("word[%d]=%s", i, word);
printf("length = %i \n\n", strlen(word));
}
}
char *getword(int i){
static char s[20];
int j=0;
while (passage[i][j] != '\0'){
s[j]=passage[i][j];
j++;
}
s[j]='\0';
return s;
}
我编写了这个程序来读取文本文件中的段落,然后将整个段落放入2d数组进行处理。我正在使用的函数是从它的第一个索引获取2d数组中的任何单词,然后将该单词与某些单词进行比较并返回结果。
但是这个节目没有提供任何东西,但我没有发现任何错误。
答案 0 :(得分:1)
因为这句话:
int i=1,j=1;
第一个单词将全部为'\ 0',所有后面的单词将使第一个单词为'\ 0'。
这就是为什么没有印刷的原因。
注意:这句话:
j=1;
应该是:
j = 0;
因为,正如评论中其他地方所提到的,C中的数组索引从0开始,而不是1
答案 1 :(得分:0)
可能是这些界限:
int i=1,j=1;
while (fscanf(fp,"%c", &passage[i][j]) != EOF){
是你眼前的祸患的来源;你对getword的唯一调用是i为零,找到一个空(在使用前设置)段落。 堆栈溢出是否应该有“代码审查”部分?