C,无法正确打印结构中的数据

时间:2014-08-08 15:48:02

标签: c arrays pointers struct

我是C上的新手所以有问题,在我想要打印它的结构数组中插入一些数据后,就像客户端或者在这种情况下商店中的汽车列表,问题是功能已经完成,但没有显示数据,我认为函数是正确的,但参数是错误的,没有什么可以检索

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

struct coches {
    int id;
    char nombre[10];
    char marca[10];
    char color[10];
    float kilometros;
};

int insertar_datos(struct coches concesionario[30]);
int checkout(char login[10], char password[10]);
void mostrar_datos(struct coches concesionario[30], int x);

int main(void) {
    struct coches concesionario[30];
    int menu, credenciales, x;
    char login[10], password[10];

    puts("\n<><><>Bienvenido<><><>\n");

    puts("\nAntes de poder usar el sistema deber estar autentificado\n");
    while (credenciales != 1) {
        puts("\nDime tu usuario:\n");
        scanf("%10s", &login);
        puts("\nDime tu password:\n");
        scanf("%10s", &password);
        credenciales = checkout(login, password);
    }

    while (menu != 3) {
        puts("\nQue deseas hacer?\n");
        puts("\n1)Insertar datos\n2)Listar coches\n3)Salir del programa\n");
        scanf("%d", &menu);
        switch (menu) {
            case 1:
                insertar_datos(concesionario);
            case 2:
                mostrar_datos(concesionario, x);
        }
    }
}

int checkout(char login[10], char password[10]) {

    if ((strcmp(strlwr(login), "12345") == 0) &&
        (strcmp(strlwr(password), "12345") == 0)) {
        return 1;
    } else {
        return 0;
    }
}

int insertar_datos(struct coches concesionario[30]) {
    char respuesta[3];
    int x = 0;
    system("cls");
    while (!strstr(respuesta, "no")) {
        puts("\nDime la id:\n");
        fflush(stdin);
        scanf("%d", &concesionario[x].id);
        system("cls");
        puts("\nDime el modelo:\n");
        fflush(stdin);
        scanf("%10s", &concesionario[x].nombre);
        system("cls");
        puts("\nDime la marca:\n");
        fflush(stdin);
        scanf("%10s", &concesionario[x].marca);
        system("cls");
        puts("\nDime el color:\n");
        fflush(stdin);
        scanf("%10s", &concesionario[x].color);
        system("cls");
        puts("\nDime los kilometros:\n");
        fflush(stdin);
        scanf("%d", &concesionario[x].kilometros);
        system("cls");
        x++;
        puts("\nQuieres insertar algo mas?\n");
        fflush(stdin);
        scanf("%3s", &respuesta);
        system("cls");
        strlwr(respuesta);
    }

    return x;
}

问题在于:

void mostrar_datos(struct coches concesionario[30], int x) {
    int i = 0;
    while (i < x) {
        printf("\nNombre: %d\n\nApellido: %s\n\nDireccion: %s\n\nEdad: "
               "%d\n\nTelefono: %d\n",
               &concesionario[i].id, &concesionario[i].nombre,
               &concesionario[i].marca, &concesionario[i].color,
               &concesionario[i].kilometros);
    }
}

2 个答案:

答案 0 :(得分:2)

void mostrar_datos(struct coches concesionario[30],int x){

    int i;

    for (i = 0; i < x; i++){

        printf("\nNombre: %d\n\nApellido: %s\n\nDireccion: %s\n\nEdad: "
           "%s\n\nTelefono: %f\n",
           concesionario[i].id, concesionario[i].nombre, concesionario[i].marca,
           concesionario[i].color, concesionario[i].kilometros);
     }
}

for循环比while循环更符合您的要求。另请注意,printf中已移除的&以及%d的已更改%sconcesionario[i].color,因为它是一个字符串。

您忘记在案例1中指定x,将其替换为:

 x = insertar_datos(concesionario);

如果有人在0之前的菜单中选择2,您也应将其初始化为1

答案 1 :(得分:0)

想想

之间的区别
&concesionario[i].id

concesionario[i].id

并且printf不打印任何合理的东西应该是有意义的。您应该调查编译器的文档,以了解如何使它为您提供错误代码的警告。大多数人设置他们的编译器,以便编译器接受许多错误的代码。