为啥我的 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和空格没有任何反应,根本无法切换输入法?

一道C语言题,从键盘输入23,为啥输出结果是32?

为啥即使我没有将 vuex 状态绑定到任何 html 输入元素,我的 vuex 状态也会在更改组件级别状态时发生变化?

在没有JSON结构的java中解析嵌套JSON

当用户输入除整数以外的任何内容时,为啥我的程序会无限循环输出? C++ [重复]