RelexCao 2021-12-16 05:45 采纳率: 100%
浏览 22
已结题

无法实现输入超期图书信息链表后的输出,不知道输入输出哪里出现问题,如何解决?

问题遇到的现象和发生背景

输出结果为:

img

问题相关代码,请勿粘贴截图
#pragma warning(disable:4996) //禁用Vusial Studio的数据溢出出错提示

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

#define LOSCXX sizeof(struct scxx)  //首次输入的图书超期信息长度





struct scxx   //首次输入的图书超期信息
{
    char grxx[30];  //个人
    char bjxx[30];  //班级
    char tsxx[30];  //图书信息
    int cqts; //超期多少天
    int fkje; //罚款金额
    struct scxx *next;
};
int n;
struct scxx*creatsc(void) //返回指针的函数
{
    struct scxx *head;
    struct scxx *ps1, *ps2;
    n = 0;
    ps1 = ps2 = (struct scxx*)malloc(LOSCXX);
    scanf("%s,%s,%s,%d,%d", &ps1->grxx, &ps1->bjxx, &ps1->tsxx, &ps1->cqts, &ps1->fkje);
    head = NULL;
    while(strcmp(ps1->grxx,"end") != 0)
    {
        n = n + 1;
        if (n == 1)head = ps1;
        else ps2->next = ps1;
        ps2 = ps1;
        ps1 = (struct scxx*)malloc(LOSCXX);
        scanf("%s,%s,%s,%d,%d", &ps1->grxx, &ps1->bjxx, &ps1->tsxx, &ps1->cqts, &ps1->fkje);
    }
    ps2->next = NULL;
    return(head);
}

void print(struct scxx*head)
{
    struct scxx* p;
    p = head;
    if(head!=NULL)
        do { printf("%s,%s,%s,%d,%d", p->grxx, p->bjxx, p->tsxx, p->cqts, p->fkje);
    p = p->next;

    } while (p != NULL);
}



int main()
{
    struct scxx *head;
    head = creatsc();
    print(head);
    return 0;
}

运行结果及报错内容

![img](
更改输入输出类型

我想要达到的结果

实现超期图书链表的输入和输出https://img-mid.csdnimg.cn/release/static/image/mid/ask/49813533693617.png "#left")

展开全部

  • 写回答

1条回答 默认 最新

  • 不务正业的学长 2021-12-16 07:02
    关注

    1、把scanf("%s,%s,%s,%d,%d", &ps1->grxx, &ps1->bjxx, &ps1->tsxx, &ps1->cqts, &ps1->fkje);改为
    scanf("%s",&ps1->grxx);
    scanf("%s",&ps1->bjxx);
    scanf("%s",&ps1->tsxx);
    scanf("%d",&ps1->cqts);
    scanf("%d",&ps1->fkje);
    2、估计你是才初学C语言,调试一下,就能看见,你之前那样赋值的话,字符串全赋值给ps1->grxx。
    3、下图是我用你的代码调试,输入字符串查看ps1的值。

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    不务正业的学长 回复 RelexCao 2021-12-16 08:53

    1、scanf一般控制台输入单个值,输入多个值一般就用多个scanf。
    2、一个scanf想控制台赋值多个变量,我很少看到有这样用。

    回复
编辑
预览

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月17日
  • 已采纳回答 12月16日
  • 创建了问题 12月16日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部