Передача 2-мерного массива в функцию - PullRequest
0 голосов
/ 11 июля 2020

Я пытаюсь сделать это с помощью c

#include <stdio.h>
int getWordAmount(FILE *file);
void getWords(char names[][]);

int main() {
    FILE *file = fopen("files/country.txt", "a+");
    if(file != NULL) printf("File is opened\n");
    else printf("Error occured in opening file\n");
    int n = getWordAmount(file);
    char names[n][20];
    getWords(names);

    for(int i = 0; i < n; i++) {
        for(int j = 0; names[i][j] != '\0'; j++) {
            printf("%c", names[i][j]);
        }
    }
    return 0;
}

int getWordAmount(FILE *file) {
    char c;
    int charAmount = 0;
    while ((c = getc(file)) != EOF) {
        if((c == ' ')||(c == '\n')) charAmount++;
    }
    return charAmount;
}

void getWords(char names[][]) {
    int i = 0, j = 0, k = 0;
    char temp[20];
    while ((c = getc(file)) != EOF) {
        temp[i++] = c;
        if((c == ' ')||(c == '\n')) {
            i = 0;
            while((temp[i] != ' ')||temp[i] != '\n') {
                names[j][k++] = temp[i++];
            }
            j++;
            i = 0;
        }
    }
}

И я получаю эту ошибку, показанную ниже

E: \ Programming \ C Files \ files . c: 3: 20: ошибка: тип массива имеет неполный тип элемента 'char []' 3 | void getWords (имена символов [] []); | ^ ~~ E: \ Programming \ C Files \ files. c: 3: 20: примечание: объявление 'name' как многомерного массива должно иметь границы для всех измерений, кроме первого E: \ Programming \ C Файлы \ файлы. c: В функции 'main': E: \ Programming \ C Файлы \ файлы. c: 11: 12: ошибка: тип формального параметра 1 неполный 11 | getWords (имена); | ^ E: \ Programming \ C Files \ files. c: На верхнем уровне: E: \ Programming \ C Files \ files. c: 30: 20: ошибка: тип массива имеет неполный тип элемента 'char [ ] '30 | void getWords (char names [] []) {| ^ E: \ Programming \ C Files \ files. c: 30: 20: примечание: объявление «имен» как многомерного массива должно иметь границы для всех измерений, кроме первого E: \ Programming \ C Files \ files. c: В функции 'getWords': E: \ Programming \ C Files \ files. c: 33: 11: error: 'c' необъявлено (первое использование в этой функции) 33 | while ((c = получить c (файл))! = EOF) {| ^ E: \ Programming \ C Files \ files. c: 33: 11: примечание: каждый необъявленный идентификатор сообщается только один раз для каждой функции, которая появляется в E: \ Programming \ C Files \ files. c: 33: 20: ошибка: «файл» не объявлен (первое использование в этой функции); Вы имели в виду "fileno"? 33 | while ((c = получить c (файл))! = EOF) {| ^ ~ | fileno

Вот мой country.txt

Bangladesh India China Nepal Bhutan
Pakistan Indonesia America Miyanmar
USA North-Korea South-korea Brazil
Argentina
Indonesia Japan Singapur Africa Rassia

1 Ответ

0 голосов
/ 11 июля 2020

Как видите ошибку, объявление многомерного массива должно иметь границы для всех измерений, кроме первого. Итак, вы можете сделать это (один из способов и самый простой способ ответить на ваш вопрос):

// in your case the 20 is second dimension
void getWords(char names[][20]) {
    int i = 0, j = 0, k = 0;
    char temp[20];
    while ((c = getc(file)) != EOF) {
        temp[i++] = c;
        if((c == ' ')||(c == '\n')) {
            i = 0;
            while((temp[i] != ' ')||temp[i] != '\n') {
                names[j][k++] = temp[i++];
            }
            j++;
            i = 0;
        }
    }
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...