int addbook(){ system(CLEAR); /////////////////////////////////////////// char sname[MAXNAME]; char author[MAXNAME]={0}; char publisher[MAXNAME]={0}; int id, count; char *namep; while(1) { id = 0; count = 0; namep = NULL; printf("请输入图书名:\n"); scanf("%s", sname); getchar(); printf("请输入图书的作者:\n"); scanf("%s", author); getchar(); printf("请输入图书的出版社:\n"); scanf("%s", publisher); getchar(); printf("请输入小于10000的图书编号:\n"); scanf("%d", &id); getchar(); if(!(id > 0 && id < 10000)) { error("输入编号不符合要求"); fflush(stdin); continue; } printf("请输入小于500的图书数量:\n"); scanf("%d", &count); getchar(); if(!(count > 0 && count < 500)) { error("输入数目不符合要求"); fflush(stdin); continue; } Book *bp; if((bp = lookup(namep = strdup(sname), id)) == NULL) { bp = (Book *)malloc(sizeof (Book)); if(bp == NULL || (bp->name = namep) == NULL) { error("注册图书失败"); fflush(stdin); continue; } bp->id = id; bp->count = count; bp->author= author; bp->publisher= publisher; bp->status = AVAILABLE; ++nbook; bp->next = head; head = bp; printf("图书 %s 注册成功\n", sname); return id; } else { fflush(stdin); error("图书名或编号已经被占用"); } } FILE *fp=fopen("file.txt","r+"); if(NULL==fp) { printf ("Failed to open the file !\n"); exit (0); } fprintf(fp,"%s\t%s\t%s\t%d\t%d\n",sname,author,publisher,count,id); fclose(fp); return -1;}
4条回答 默认 最新
- qfl_sdu 2021-06-03 23:00关注
1.将
scanf("%s", sname);
getchar();改为:gets(sname);
其它需要输入字符串的地方都改成这种形式,scanf在碰到空格后就结束,所以在输入书名时,如果有空格,后面的就会乱码。gets函数能够接收空格,按回车时接收终端输入的所有字符。
2.如果按1修改后,仍然无法解决问题,那么,在while循环中,在调用gets函数前,先将缓存重置一下:
memset(sname,0,MAXNAME)
memset函数需要包含<string.h>头文件
如有帮助,请采纳一下,谢谢。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
- ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
- ¥15 手机接入宽带网线,如何释放宽带全部速度
- ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
- ¥15 ETLCloud 处理json多层级问题
- ¥15 matlab中使用gurobi时报错
- ¥15 这个主板怎么能扩出一两个sata口
- ¥15 不是,这到底错哪儿了😭
- ¥15 2020长安杯与连接网探
- ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么