Почему вообще не работают все функции?

#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 по его первому индексу, затем сравнить слово с некоторыми определенными словами и вернуть результаты.

Но эта программа ничего не показывает, хотя я не заметил ничего плохого.


person phantom    schedule 22.10.2017    source источник
comment
stackoverflow.com/help/mcve   -  person user31264    schedule 22.10.2017
comment
Добро пожаловать на stackoverflow.com. Пожалуйста, найдите время, чтобы прочитать страницы справки, особенно разделы с названием На какие темы я могу здесь задавать вопросы? и Какие типы вопросов мне следует избегать? . Также пройдите тур и прочитайте как задавать хорошие вопросы. Наконец, узнайте, как создать минимальный, полный и проверяемый пример.   -  person cschneid    schedule 22.10.2017
comment
Вы должны быть более конкретными в отношении текущего поведения, того, что вы сделали для его тестирования, как вы его отладили и т. д.   -  person David Hoelzer    schedule 22.10.2017
comment
Решение этой проблемы действительно состоит в том, чтобы научиться пользоваться отладчиком. Если ваш подход к отладке заключается в том, чтобы опубликовать вопрос, разработка чего-либо займет у вас очень много времени.   -  person Clifford    schedule 22.10.2017
comment
индексы в C начинаются с 0, а не с 1 и продолжаются (количество элементов в массиве -1)   -  person user3629249    schedule 23.10.2017
comment
функция для чтения текста из файла делает предположение, что каждое слово будет МЕНЬШЕ 20 символов, эта же функция не может завершить строковые массивы символом '\0' (что может быть необязательно, так как массив объявлено в файле global space.   -  person user3629249    schedule 23.10.2017
comment
при вызове fopen() всегда проверяйте (!=NULL) возвращаемое значение, чтобы убедиться, что операция прошла успешно.   -  person user3629249    schedule 23.10.2017


Ответы (2)


из-за этого утверждения:

int i=1,j=1;

первое слово будет все '\0', а все последующие слова будут иметь первый символ '\0'.

Поэтому ничего не печатается.

Примечание: это заявление:

j=1;

должно быть:

j = 0;

потому что, как упоминалось в других комментариях, индекс массива в C начинается с 0, а не с 1

person user3629249    schedule 23.10.2017

скорее всего эти строки:

int i=1,j=1;
while (fscanf(fp,"%c", &passage[i][j]) != EOF){

являются источником вашего непосредственного горя; ваш единственный вызов getword имеет i, равное нулю, и находит пустой (используйте перед набором) отрывок. Должен ли быть раздел «обзор кода» о переполнении стека?

person mevets    schedule 22.10.2017