「已注销」 2018-01-17 08:45 采纳率: 100%
浏览 948
已采纳

gets() 和 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条回答 默认 最新

  • abc3065369 2018-01-17 08:57
    关注

    多次用scanf, 要配合getchar(); 接收回车,大概就是这个原因吧

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败