为什么所有功能根本不起作用?

时间:2017-10-22 15:33:37

标签: c multidimensional-array strcmp

#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数组中的任何单词,然后将该单词与某些单词进行比较并返回结果。

但是这个节目没有提供任何东西,但我没有发现任何错误。

2 个答案:

答案 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为零,找到一个空(在使用前设置)段落。 堆栈溢出是否应该有“代码审查”部分?