Проблема с получением пользовательского ввода в динамический массив C - PullRequest
0 голосов
/ 30 сентября 2018

Кажется, у меня проблемы с получением пользовательского ввода в динамический массив на языке C.

#include "stdio.h"

int main(void){
    int counter = 0;
    int x = 1;
    int i;
    printf("Enter the number of teams playing in the league: \n");
    scanf("%d", &i);
    char teams[i];
    for (counter = 0; counter < i; counter++){
        char teams[counter];
        printf("Enter team names: \n");
        scanf("%s", teams);
    }
    for (counter = 0; counter < i; counter++){
        char teams[counter][10];
        printf(" Team %d is %s \n", x, *teams);
        x++;
    }
}

Когда я запускаю этот код, я получаю следующий вывод:

Enter the number of teams playing in the league: 2

Enter team names: Team1

Enter team names: Team2

 Team 1 is Team1 

 Team 2 is \320\365\277\357\376 

Program ended with exit code: 0

Notсмог понять мою ошибку.Буду рад любой помощи.

Спасибо!

1 Ответ

0 голосов
/ 30 сентября 2018

Есть некоторые основные ошибки, особенно с вашим пониманием указателей и концепций языка Си.«команда» - это массив указателей на символы, и команды «char» [i] не совсем корректны;один правильный способ - динамически распределять память для набора имен команд.Сравнивая приведенный ниже код с вашим, я уверен, что вы сможете определить области, где вы допустили ошибки.PS: я использую символ формата «m» внутри scanf для динамического выделения памяти для имени команды.

int main(int argc, char **argv){
    int counter = 0;
    int i, ret;
    char **teams;
    printf("Enter the number of teams playing in the league: \n");
    scanf("%d", &i); // check return value yourself
    teams=(char **)malloc(sizeof(char *)*i);
    if(NULL==teams) perror("not enough memory"), exit(1);
    for (counter = 0; counter < i; counter++){
        printf("Enter team names: \n");
        ret=scanf("%ms", &teams[counter]);
        if(ret<1)//hanndle error. i'll just quit.
            exit(-1);
    }
    for (counter = 0; counter < i; counter++){
        printf(" Team %d is %s \n", counter+1, teams[counter]);
        free(teams[counter]);
    }
    free(teams);    
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...