Почему элементы не остаются в массиве? - PullRequest
0 голосов
/ 16 октября 2019

В этом коде я читаю файл, состоящий из ряда строк. В каждой строке 2 слова, разделенных \ t. Пока я читаю файл, я создаю динамически размещаемую таблицу, которая состоит из левого столбца слов в файле. Проблема в том, что строки массива выглядят корректными только в циклах. Когда я пытаюсь распечатать строки [i] вне циклов, элементы исчезают. Извините, если я не очень хорошо объяснил, я новичок в языке C ..!

char line[21];
int i=0;
FILE *infile=fopen("words.txt", "r");
if(infile == NULL){
    printf("The Input File is Null! Please Re-Run the program.");   
        return 1;             
}
int numofrows=11;
char **rows=malloc(sizeof(char*)*numofrows);
//read the file
while(fgets(line, sizeof(line), infile) != NULL) {
    english = strtok(line, search); //this is the word of the left column
    englength=strlen(english);//the length of the word
    for(i=0;i<numofrows;i++){
        rows[i] = malloc(11*sizeof(char));
        strcpy(rows[i], english);
    }
}
        //this doesnt work     
    for(i=0;i<numofrows;i++){    
            printf(rows[i]);
        }

Последний цикл for должен печатать каждое слово в строках массива, вместо этого ничего не печатается.

Ответы [ 2 ]

2 голосов
/ 16 октября 2019

Ваше утверждение printf(rows[i]); неправильно сформировано. Попробуйте printf("%s", rows[i]);

0 голосов
/ 16 октября 2019

Обязательно записывайте каждую новую строку в новый слот в массиве. Позже, при печати массива, убедитесь, что не прочитали больше строк, чем было сохранено ранее.

Это отправная точка для вас, но есть еще несколько вещей, которые можно улучшить.

  unsigned i = 0;
  for (i = 0; i<numofrows && fgets(line, sizeof(line), infile) != NULL; ++i) {
    char* english = strtok(line, search); //this is the word of the left column
    unsigned englength=strlen(english);//the length of the word
    rows[i] = malloc((englength+1)*sizeof(char));
    strcpy(rows[i], english);
  }
  for(unsigned j=0;j<i;j++){
    printf("%s\n",rows[j]);
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...