#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;
}
(c语言)为什么运行时后面出现一长串数字?
- 写回答
- 好问题 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; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 2无用
悬赏问题
- ¥15 Vue3 大型图片数据拖动排序
- ¥15 划分vlan后不通了
- ¥15 GDI处理通道视频时总是带有白色锯齿
- ¥20 用雷电模拟器安装百达屋apk一直闪退
- ¥15 算能科技20240506咨询(拒绝大模型回答)
- ¥15 自适应 AR 模型 参数估计Matlab程序
- ¥100 角动量包络面如何用MATLAB绘制
- ¥15 merge函数占用内存过大
- ¥15 使用EMD去噪处理RML2016数据集时候的原理
- ¥15 神经网络预测均方误差很小 但是图像上看着差别太大