为啥我的 C 结构在输入中没有得到任何数据?
Posted
技术标签:
【中文标题】为啥我的 C 结构在输入中没有得到任何数据?【英文标题】:Why doesn't my C struct get any data in input?为什么我的 C 结构在输入中没有得到任何数据? 【发布时间】:2021-12-15 04:12:46 【问题描述】:所以,我正在尝试编写这个程序,它应该可以创建一个动态列表,其中存储一些汽车的数据(型号、颜色、年份),然后应该可以查看所有汽车的列表其中。程序中没有错误,也没有分段错误,但是当我尝试可视化列表时,我没有得到任何输出。我尝试使用 GDB 对其进行调试,但结构指针在输入过程中实际上并没有得到任何数据。这是整个代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct node
char modello[81];
char colore[81];
int anno;
struct node *next;
;
typedef struct node car;
car* insertNode(car* head);
car* destroyer(car* head);
void visualizer(car *head);
int main()
car *head = NULL;
int n,tasto;
char option,enter;
do
printf("Premere 1 per inserire un nuovo veicolo nel catalogo.\n");
printf("Premere 2 per visualizzare l'intero catalogo.\n");
printf("Premere qualsiasi altro tasto per uscire.\n\n");
scanf("%i",&tasto);
switch (tasto)
case 1:
insertNode(head);
break;
case 2:
visualizer(head);
break;
default:
break;
while(tasto==1||tasto==2);
if(head!=NULL)
head=destroyer(head);
printf("Uscita.\n");
return 0;
car* insertNode(car *head)
car *temp;
car *prec;
temp=(car *)malloc(sizeof(car));
if(temp!=NULL)
temp->next=NULL;
if(head==NULL)
head=temp;
else//Raggiungi il termine della lista
for(prec=head;(prec->next)!=NULL;prec=(prec->next));
prec->next=temp;
printf("Inserire il modello dell'auto: ");
scanf("%s",&temp->modello);
printf("Inserire il colore dell'auto: ");
scanf("%s",&temp->colore);
printf("Inserire l'anno di immatricolazione dell'auto: ");
scanf("%i",&temp->anno);
printf("\n");
else
printf("Memoria esaurita!\n");
return head;
void visualizer(car* head)
car *temp;
int i=1;
temp=head;
while(temp!=NULL)
printf("Auto numero %i:\n",i);
printf("Modello: %s.\n",temp->modello);
printf("Colore: %s.\n",temp->colore);
printf("Anno di immatricolazione: %i.\n",temp->anno);
printf("\n");
i++;
temp=temp->next;
car *destroyer(car* head)
car *temp;
while(head!=NULL)
temp=head;
head=head->next;
free(temp);
return NULL;
有人能解释一下为什么会这样吗?我不知道这有什么问题。
【问题讨论】:
链接列表是很久以前就解决的问题。您确定找不到任何示例代码吗? 你在insertNode
中修改并返回head
,但不要赋值返回值。因此head
保持为空。
【参考方案1】:
第一个错误出现在 do while 中,当您在 case 开关的第 31 行左右时,您不会将插入函数的返回值存储在任何地方。这是固定代码:
do
printf("Premere 1 per inserire un nuovo veicolo nel catalogo.\n");
printf("Premere 2 per visualizzare l'intero catalogo.\n");
printf("Premere qualsiasi altro tasto per uscire.\n\n");
scanf("%i",&tasto);
switch (tasto)
case 1:
head=insertNode(head);
break;
case 2:
visualizer(head);
break;
default:
break;
while(tasto==1||tasto==2);
第二个错误是当您在插入节点中从键盘获取值时。 当您已经有了要填充的数组的地址时,您正在使用“&”运算符,因为您确实在使用数组。在这里可以看到固定的代码:
car* insertNode(car *head)
car *temp;
car *prec;
temp=(car *)malloc(sizeof(car));
if(temp!=NULL)
temp->next=NULL;
if(head==NULL)
head=temp;
else//Raggiungi il termine della lista
for(prec=head;(prec->next)!=NULL;prec=(prec->next));
prec->next=temp;
printf("Inserire il modello dell'auto: ");
scanf("%s",temp->modello);
printf("Inserire il colore dell'auto: ");
scanf("%s",temp->colore);
printf("Inserire l'anno di immatricolazione dell'auto: ");
scanf("%i",&temp->anno);
printf("\n");
else
printf("Memoria esaurita!\n");
return head;
【讨论】:
考虑temp=(car *)malloc(sizeof(car));
--> temp=malloc(sizeof *temp);
更容易编码、审查和维护。以上是关于为啥我的 C 结构在输入中没有得到任何数据?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的mac里,按command和空格没有任何反应,根本无法切换输入法?