user-0 提问: 为什么我的atof不能成功将字符串转换为浮点型，是我的结构数组里面字符串指针用错了吗

回复:
user: user-1
content: 结构体要么给那两个 char* 改为char [大小]; 要么改为 double,然后把printf和scanf的相关格式化改下 。 你把这个程序放到vs里面跑 ，按F5 很好调的

user: user-2
content: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h>  typedef struct good//单一商品结构 {      char name[32];     //char *inprice;     //char *outprice;     char inprice[16];     char outprice[16];     int numbers;//商品库存量 }GOOD;  void fun1(){     printf("\n");     int choice;     int i=0;      GOOD goods;      FILE *fp ;     fp=fopen("商品库存表.txt" , "a+");//打开文件     if ( fp == NULL )     {         printf("文件打开失败!\n") ;     }       do//商品信息录入     {           printf("请输入入库商品的名称\n");//商品名          scanf("%s", goods.name);         //getchar();          printf("请输入商品进货价格\n");//商品进货价格          //scanf("%s", &goods.inprice);         scanf("%s", goods.inprice);          printf("请输入商品销售价格\n");//商品销售价格          //scanf("%s",&goods.outprice);         scanf("%s", goods.outprice);         //getchar();          printf("请输入入库商品的数量\n");//商品库存数量         scanf("%d", &goods.numbers);          fwrite( &goods , sizeof(GOOD), 1, fp ); //将信息写入文件           printf("是否继续录入?(按数字1继续，数字0退出)");//判断是否继续录入？         scanf("%d", &choice);//读取用户选择         //getchar();//吃回车     }     while(choice==1);      fclose(fp);//关闭文件夹 }  void fun3(){     char names[10];//用户购买商品名     int i=0;     double f;     int b,j,xuanze=0;     int count,chioce;     int m=0;     int c=0;     double sum=0;       GOOD goods[1000];      FILE *fp ;     fp=fopen("商品库存表.txt" , "a+");//打开文件     if ( fp == NULL )     {         printf("文件打开失败!\n");     }     rewind(fp);//指针位置重置     do     {          count=fread(&goods[m],sizeof(GOOD),1,fp); //从文件中读所有商品的数据         if(count==1)         {             printf("成功读入第%d个\n",m+1);             m++;         }     }while (!feof (fp));//判断是否读到文件尾     fclose(fp);     printf("系统准备完毕!\n");     do{         printf("请输入要购买的商品名:\n");         scanf("%s",names);         getchar();          for(j=0;j<m;j++)//通过商品名查询价格         {             if(strcmp(names,goods[c].name) != 0)             {                 xuanze=1;             }             c++;         }         if(xuanze!=1)             exit(0);          printf("请输入需要购买商品的数量\n");         scanf("%d",&b);         //getchar();    //为啥要加呢          if(b<=goods[i].numbers)//库存足够         {             printf("商品购买成功!");         }         f=atof(goods[i].outprice);         printf("%lf", f);         sum+=f*b;          printf("是否需要继续购买？(1继续购买，0结算)\n");         scanf("%d",&chioce);         //getchar();    //为啥要加呢？     }while(chioce==1);      printf("正在结算，请稍等.....\n");      printf("您一共需要支付%.2f元!\n",sum);      printf("感谢您的光顾，祝您生活愉快!");     getchar(); }     //void main() int main() {     int choice;     while(1)     {         printf("\n\n\n");         printf("****欢*迎*使*用*商*品*销*售*管*理*系*统****\n");         printf("*                                         *\n");         printf("*             1.库存表数据录入            *\n");         printf("*             2.销售表数据录入            *\n");         printf("*             3.销售商品                  *\n");         printf("*             4.库存表查询                *\n");         printf("*             5.销售表查询                *\n");         printf("*             0.退出                      *\n");         printf("*                                         *\n");         printf("*******************************************\n");         printf("please choice(0-5):");         scanf("%d",&choice);         switch(choice)         {             case 0:    exit(0);  // 头文件定义 <stdlib.h>,结束程序             case 1:    fun1()       ;break;             case 2:   // fun2()       ;break;             case 3:    fun3()       ;break;             case 4:   // fun4()       ;break;             case 5:    //fun5();                        break;          }      } } 供参考～  楼主不止一次问这个程序了吧。 之前给你改的，你没有完全领会呀。结构体声明里用的是指针，在scanf之前为什么不申请空间，不申请空间进出价变量都是野指针呢。  要么声明时就用数组，不用指针。 另外atof不对的原因可能是读取到的就有问题，读取有问题，那么写入的就会有问题。建议先把商品的文件删掉，重新运行我改的程序。

user: user-0
content: 刚才改了，执行到输出atof的返回值时，还是不能继续了

user: user-3
content: 把inprice和outprice改成字符数组