|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
该加&的地方也加了为什么会这样?
#include<stdio.h>
#include<stdlib.h>
struct Date
{
int year;
int month;
int day;
};
struct Book
{
char title[128];
char author[48];
float price;
struct Date date;
char publisher[48];
struct Book *pnext;
};
int main()
{
struct Book *temp=(struct Book*)malloc(sizeof(struct Book));
printf("请输入书名:");
scanf("%s",temp->title);
printf("请输入作者:");
scanf("%s",temp->author);
printf("请输入售价:");
scanf("%.2f",&temp->price);
printf("请输入出版日期(以“年-月-日”的格式输入):");
scanf("%d-%d-%d",&temp->date.year,&temp->date.month,&temp->date.day);
printf("请输入出版社:");
scanf(" %s",temp->publisher);
return 0;
}
这本来就是一个假命题呀。scanf函数中 没有%.2f 这种格式指令 那么程序就没法向变量空间中写入。数据就保留在了输入缓冲区内。
意思就是 你写的48.8 不符和 %.2f 那么这个数据 就会给到下面的日期 输入,48.8 和 日期的 %d-%d-%d 有不符合 , 他又会给到 出版社的输入, 和 %s 还不符合,该输入又被略过,就出现了 你说的这种现象。实际就是 那个48.8 一直在输入缓冲区内 走过了三个scanf函数, 所以没有用户输入的机会。
处理方法有两个。
- printf("请输入售价:");
- scanf("%.2f",&temp->price);
- float f = 0.0;
- scanf("%f", &f);
- printf("请输入出版日期(以“年-月-日”的格式输入):");
- scanf("%d-%d-%d",&temp->date.year,&temp->date.month,&temp->date.day);
复制代码
这个是用一个 float 来接收掉这个输入 比较低级。
- printf("请输入售价:");
- scanf("%.2f",&temp->price);
- fflush(stdin); //清空输入缓冲区
- printf("请输入出版日期(以“年-月-日”的格式输入):");
- scanf("%d-%d-%d",&temp->date.year,&temp->date.month,&temp->date.day);
复制代码
这个比较常用
最后 求一个最佳答案 想给什么奖励 都丢过来吧
|
-
|