#include <stdio.h>
struct book
{
char name[1000];
int price;
};
int main()
{
struct book ct1[5];
int i;
for (i = 0; i < 5; i++)
{
printf("Please Enter %d Number Book Name: ",i+1);
gets(ct1[i].name);
printf("Price: ");
scanf("%d", &ct1[i].price);
}
for (i = 0; i < 5; i++)
{
printf("%d Nuumber Book's name and price : \n",i+1);
printf("%s = %d\n", ct1[i].name, ct1[i].price);
}
return 0;
}
我编写此代码以获取图书名称和价格并进行打印。
像
输入: 请输入1号码簿名称:Sherlock
价:100
...................
...................
输出:
Number Book的名称和价格: Sherlock = 100
.................
................
但它接受这样的输入 请输入1号码簿名称:sherlock holmes
价格:100
请输入2号码簿名称:价格:........
第一次是正确的,但从第二次出现问题。请帮帮我。
答案 0 :(得分:1)
首先停止使用gets
,改为使用fgets
-
fgets(ct1[i].name,sizeof ct1[i].name,stdin );
在scanf
之后你可以这样做 -
while((c=getchar())!=EOF && c!='\n');
在c
循环之前将int
声明为for
。
这是从[{1}}中移除'\n'
,stdin
在每次迭代中保留scanf
并导致fgets
返回。
答案 1 :(得分:0)
在scanf
之后包含此行以删除stdin中剩余的换行符
fflush(stdin)