我是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);
}
}
答案 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
的已更改%s
至concesionario[i].color
,因为它是一个字符串。
您忘记在案例1中指定x
,将其替换为:
x = insertar_datos(concesionario);
如果有人在0
之前的菜单中选择2
,您也应将其初始化为1
。
答案 1 :(得分:0)
想想
之间的区别&concesionario[i].id
和
concesionario[i].id
并且printf不打印任何合理的东西应该是有意义的。您应该调查编译器的文档,以了解如何使它为您提供错误代码的警告。大多数人设置他们的编译器,以便编译器接受许多错误的代码。