Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
程序终止后变量保留值,如何防止?C_C_Variables_Structure - Fatal编程技术网

程序终止后变量保留值,如何防止?C

程序终止后变量保留值,如何防止?C,c,variables,structure,C,Variables,Structure,这是一个程序,要求用户输入有关销售自行车的运输信息,非常蹩脚。最后,当它打印出自行车订单数量和总成本时,这些数字就被搞乱了。以前输入的金额似乎仍留在内存中。我该如何解决这个问题?如果这不是问题所在,我不介意别人告诉我:) #包括 #包括 //结构 类型定义结构 {char cust_name[25]; char add_one[20]; char add_two[20]; }秩序; 订单; 内部主(空){ fflush(stdin); 系统(“清除”); //初始化变量 双倍数_顺序=0; 双倍

这是一个程序,要求用户输入有关销售自行车的运输信息,非常蹩脚。最后,当它打印出自行车订单数量和总成本时,这些数字就被搞乱了。以前输入的金额似乎仍留在内存中。我该如何解决这个问题?如果这不是问题所在,我不介意别人告诉我:)

#包括
#包括
//结构
类型定义结构
{char cust_name[25];
char add_one[20];
char add_two[20];
}秩序;
订单;
内部主(空){
fflush(stdin);
系统(“清除”);
//初始化变量
双倍数_顺序=0;
双倍价格;
炭自行车;
高风险;
双m=359.95;
双s=279.95;
//订单输入
printf(“输入客户信息”);
printf(“客户名称:”);
scanf(“%[^\n]s”、&order.cust\u name);
printf(“\n输入者街道地址:”);
scanf(“%[^\n]s”、&order.add\u one);
printf(“\n输入城市、州和邮政编码:”);
scanf(“%[^\n]s”、&order.add\u two);
printf(“\n订购的自行车数量:”);
scanf(“%d”和订购的编号);
printf(“\n订购哪种类型的自行车\n M山地自行车\n S街道自行车”);
printf(“\n选择一个(M或S):”;
scanf(“%c”和“bike”);
printf(“\N客户风险(是/否):”;
scanf(“%c”&风险);
系统(“清除”);
//打印订单
printf(“\n*************装运说明**********”);
printf(“\nTo:%s\n%s\n%s”,order.cust\u name,order.add\u one,order.add\u two);
if(bike='M'| | bike='M')
printf(“\n\n订单号:%d辆山地自行车”);
其他的
printf(“\n\n订单号:%d辆街道自行车”);
if(bike='M'| | bike='M')
价格=订购数量×m;
其他的
价格=订购数量*s;
if(risk==“Y”| risk==“Y”)
printf(“\n运费,货到付款%d\n”,价格);
其他的
printf(“\n运费,并向客户开具%d\n”价格);
printf(“************************************************************\n”);
返回0;
}

您正在使用
%d
打印订购的
编号
价格
,它们是
的两倍<代码>%d
仅适用于整数类型。使用
%lf
printf
scanf
加倍。

scanf和printf的格式都是错误的,因此您既不能正确读取也不能正确写入值。

@JesusRamos该标记已被弃用。请看@AaronDufour错过了那个帖子,谢谢:)你能发布你得到的输出吗?下面的答案修复了它,这是我使用的%d的一个问题,它没有给我疯狂的数字!但它确实给了我所有的零:(好的,将数字_顺序改为整数,并在那些有效的数字上使用%d。我如何使用%lf而不让一个疯狂的0字符串尾随数字?@Church阅读您的printf文档…答案就在那里。@Church:Checkout。
#include <stdio.h>
#include <math.h>
//structure
typedef struct
{char cust_name[25];
 char add_one[20];
 char add_two[20];
 }ORDER;

 ORDER order;

int main(void){
fflush(stdin);
system ( "clear" );

 //initialize variables
 double number_ordered = 0;
 double price;
 char bike;
 char risky;
 double m = 359.95;
 double s = 279.95;
    //inputs for order
    printf("Enter Customer Information\n");
    printf("Customer Name: ");
        scanf(" %[^\n]s", &order.cust_name);

    printf("\nEnter Street Address: ");
        scanf(" %[^\n]s", &order.add_one);

    printf("\nEnter City, State, and ZIP: ");
        scanf(" %[^\n]s", &order.add_two);

    printf("\nHow Many Bicycles Are Ordered: ");
        scanf(" %d", &number_ordered);

    printf("\nWhat Type Of Bike Is Ordered\n  M Mountain Bike \n  S Street Bike");
   printf("\nChoose One (M or S): ");
       scanf(" %c", &bike);

    printf("\nIs The Customer Risky (Y/N): ");
        scanf(" %c", &risky);

    system ( "clear" );

    //print order
    printf("\n**********Shipping Instructions**********");
    printf("\nTo: %s\n    %s\n    %s", order.cust_name, order.add_one, order.add_two);

    if (bike == 'M' || bike == 'm')
        printf("\n\nShip: %d Mountain Bikes", number_ordered);
    else 
        printf("\n\nShip: %d Street Bikes", number_ordered);

    if (bike == 'M' || bike == 'm')
        price = number_ordered * m;
    else
        price = number_ordered * s;

    if (risky == 'Y' || risky == 'y')
        printf("\nBy Freight, COD %d\n", price);
    else
        printf("\nBy Freight, And Bill The Customer %d\n", price);


        printf("*****************************************\n");
        return 0;
        }