Ошибка при передаче многомерного массива char в функцию void в C - PullRequest
0 голосов
/ 03 марта 2019

Я передаю многомерный массив в функцию «read_line», но я получаю только 1D-массив, см. Код ниже.Что делает read_line - читает предложение и сохраняет каждое слово как одну строку в 2D-массиве, но когда я пытаюсь распечатать 2D-массив обратно в основной функции, я получаю только 1D-массив, почему?Большое спасибо за помощь

#include<stdio.h>
#include<string.h>

#define ROW 10
#define COLUMN 10


static char terminating_char;

int read_line(char array_string[ROW][COLUMN], int row_num);


int main() {

    int row_num=0;
    char array_string[ROW][COLUMN];

    printf("Write a sentens: ");
    read_line(array_string, row_num);

    printf("Reversal of sentence: ");
    while (row_num > 0)
        printf("%s ", array_string[row_num--]);
    printf("%s%c\n", array_string[row_num], terminating_char);

}

int read_line(char array_string[][COLUMN], int row_num) {

    char c;
    int i=0, j=0;

    while  ( (c = getchar())  != '\n' && i < ROW)
    {
        if (c == ' ' || c == '\t') {
            array_string[i][j] = '\0';
            i++;
            j = 0;
            continue;
        }

        if (c == '.' || c == '!' || c == '?') {
            terminating_char = c;
            array_string[i][j] = '\0';
            break;
        }
        else if (j < COLUMN)
            array_string[i][j++] = c;

    }
    return row_num;

}

1 Ответ

0 голосов
/ 03 марта 2019

функция: read_line() возвращает новый номер строки.Но функция main() игнорирует возвращаемое значение, поэтому не обновляет локальную переменную row_num, поэтому блок кода, начинающийся с:

while (row_num > 0)

, никогда не будет выполняться

второй параметрдо read_line() не нужно.Этот параметр может быть просто локальной функцией в функции, а не параметром

...