bennnnno 2023-01-30 21:35 采纳率: 33.3%
浏览 73
已结题

(c语言)为什么运行时后面出现一长串数字?

img


#include <stdio.h>
#include <stdlib.h>
#define len sizeof(struct fanka)
struct fanka
{
    int kahao;
    char name[100];
    int money;
    struct fanka *next;
};

struct fanka *create()
{
    struct fanka *head=NULL;
    struct fanka *tail;
    struct fanka *n;
    int count=0;
    while(1)
    {
     n=(struct fanka *)malloc(len);
     printf("请输入学生的卡号、姓名、金额:\n");
     scanf("%d,%s,%d",&n->kahao,n->name,&n->money);
     if(n->kahao==0)
      {
        free(n);
        break;
      }
     else 
      {    
          if(count==0)
       {
            head=n;
            tail=n;
       }
         else
      {
            tail->next=n;
            tail=n;
      }
     count++; 
     }
    }
    tail->next=NULL;
    return head;
}

void prin(struct fanka *head)
{
  struct fanka *s;
  s=head;
  if(s==NULL)
    printf("这是一个空表。");
  else
   {
      while(s!=NULL)
    {
     printf("\n%d %s %d",s->kahao,s->name,s->money);
     s=s->next;
    }
   }
}

void chongzhi(struct fanka *head)
{
    struct fanka *s;
    s=head;
    int n,yuan,z;
    printf("请输入学生的卡号:");
    scanf("%d",&n);
    printf("请输入要充值的金额:");
    scanf("%d",&yuan);
    for( ;s!=NULL && s->kahao!=n;s=s->next)
           ;
    if(s==NULL)
     printf("卡号输入错误,请重新输入。");
    else
     z=s->money+yuan;
     printf("充值前卡内金额为%d,充值后卡内金额为%d。",s->money,z);
}
void maifan(struct fanka *head)
{
   int n,m,z;
   printf("请输入学生的卡号:");
   scanf("%d",&n);
   printf("请输入饭费:");
   scanf("%d",&m);
   struct fanka *s;
   s=head;
   if(m<0)
     printf("饭费不可为负。");
   else
    {
     for( ;s!=NULL && s->kahao!=n;s=s->next)
              ;
        if(s==NULL)
           printf("卡号输入错误。");
        else if(s->money<5)
           printf("余额不足,请充值。");
             else
           {
           z=s->money-m;
           printf("买饭成功。买饭前余额为%d,买饭后余额为%d",s->money,z);
           }
   }
}

int main()
{
  int a;
  struct fanka *head=NULL;
  head=create();
  prin(head);
  while(a!=3)
    {
        printf("\n请选择您想要进行的服务:\n");
        printf("1.买饭  2.充值  3.退出系统\n");
        scanf("%d",&a);
        switch(a)
        {
            case 1: maifan(head);break;
            case 2: chongzhi(head);break;
            case 3: break;
            defaulf :printf("请选择正确的序号\n"); 
        }
    }
  return 0;
}
  • 写回答

1条回答 默认 最新

  • P2441M 2023-01-30 22:10
    关注

    问题其实是scanf中%s会一直读取字符串,所以程序会把name设置为“zhangsan,100”,而money则会因为是空值而变成其他奇怪的数字。
    要解决这个问题,只能一行一行的输入:

    struct fanka *create()
    {
        struct fanka *head=NULL;
        struct fanka *tail;
        struct fanka *n;
        int count=0;
        while(1)
        {
         n=(struct fanka *)malloc(len);
         printf("请输入学生的卡号、姓名、金额:\n");
         // 一行一行输入
         scanf("%d", &n->kahao);
         scanf("%s", n->name);
         scanf("%d", &n->money);
         // scanf("%d,%s,%d",&n->kahao,n->name,&n->money);
         if(n->kahao==0)
          {
            free(n);
            break;
          }
         else 
          {    
              if(count==0)
           {
                head=n;
                tail=n;
           }
             else
          {
                tail->next=n;
                tail=n;
          }
         count++; 
         }
        }
        tail->next=NULL;
        return head;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 1月30日
  • 已采纳回答 1月30日
  • 赞助了问题酬金15元 1月30日
  • 修改了问题 1月30日
  • 展开全部

悬赏问题

  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 划分vlan后不通了
  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大