Печатать список имен в C

Правда я немного потерян в этом указателей и нуждаюсь в помощи с программой предполагается, что я должен входить n для количества имен, у которого будет список, вводить один в один имена и в конце концов было бы должно показывать мне в форме списка имена, которые он вводит в компьютер, но в конце концов только он показывает мне последнее имя, которое вводит информацию в компьютер, спасибо заранее.

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

void leer_cadena(int &);
void escribir_cadena(int &,char *);
char *nombre;

int main(){
    int n,i;
    printf("Ingresa el numero de nombres: ");
    scanf("%d",&n);
    leer_cadena(n);
    escribir_cadena(n,nombre);
    getch();
}

void leer_cadena(int &n)
{
    int L,i;
    char cadena[30];
    for (i=0;i<n;i++)
    {
        printf("\nIngresa el nombre: ");
        fflush(stdin);
        gets(cadena);
        L=strlen(cadena);
        nombre=(char *)malloc(L*sizeof(char));
        strcpy(nombre,cadena);
    }
}

void escribir_cadena(int &n,char *cad){
    int i; 
    for (i=0;i<n;i++)
    {
        while(*cad)
        {
            putchar(*cad++);    
        }
    }
}
3
задан 14.11.2018, 07:42
1 ответ

В leer_cadena ты читаешь имя, написанное пользователем n nГєmero раз. Но каждый раз ты распределяешь это ему в ту же глобальную переменную: nombre.

В момент писания их на экране, sГіlo ты видишь имя Гєltimo, потому что это был Гєltimo стоимость с тем, который sobreescribiste эта переменная. Такой

Как это - C, не C ++ (хотя в definiciГіn leer_cadena ты перемещаешь n из-за ссылки: int& n, и это C ++, но это mГЎs страховка состоит в том, чтобы это была ошибка или confusiГіn), я предполагаю, что tendrГ-эксперт, что создавать array dinГЎmicamente, в зависимости от cuГЎntos ты прочитаешь имена, и сохранять ahГ - имена.

И конечно, ты ничего не делаешь из чистоты памяти, если ты размещаешь что-то с malloc, в algГєn момент ты должен называть free. Если ты используешь C ++ serГ - new / delete;

2
ответ дан 20.11.2019, 03:28