在结构变量

时间:2015-10-21 13:44:23

标签: c

#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号码簿名称:价格:........

第一次是正确的,但从第二次出现问题。请帮帮我。

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)