qq_28012069
50no
2018-01-17 08:45

gets() 和 scanf() 的问题

5
  • c
  • scanf

问题是:
为什么初始化信息的段落一定要用
gets(num);

p->price = atoi(num);

这样的格式进行输入,而直接用
scanf("%d", &p->price); 就会输入错误呢?
新手真心求教,代码如下:

 #include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
    struct booktype                         //这里定义一个结构体, 
    {                                       //用来记录书的名字和价格 。 
        char name[20];
        int price;
    }a[5];
    struct booktype *p;
    char num[20];

    for (p=a; p<a+5; p++){                  //这段是初始化信息 (问题段!!) 
        printf("输入书的信息:\n");         //如果是: 
        gets(p->name);                      //scanf("%d", &p->price); 则会输入错误, 
        gets(num);                          //原本输入5组数据,结果输入3组就结束了?! 
        p->price = atoi(num);               
    } 

    p=a;                                    //这段是用来找价格最大值, 
    int i;                                  //并输出最大的价格和书的名字。 
    int max_price;
    char max_name[20];
    max_price = p->price;
    strcpy(max_name,p->name);
    for (p=a+1; p<a+5; p++){
        if (p->price>max_price){
            max_price = p->price;
            strcpy(max_name,p->name);
        }
    }

    printf("%d %s", max_price, max_name);

    return 0;

}
  • 点赞
  • 回答
  • 收藏
  • 复制链接分享

5条回答

为你推荐

换一换