我的IF声明不起作用

时间:2015-02-08 16:40:13

标签: c

我是C编程的初学者,我已经开始做第一次任务了。在这个任务中我应该打印出一些信息给用户并询问他们的输出,并根据他们的输出我应该做一些计算并打印出结果。我不太确定在哪里,但我的结果是零或与用户输入无关的数字。 有人可以帮帮我吗?

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
    int c=0, f=0, q=0, w=0;
    int memory = 0, monitor = 0, hard = 0, subtotal = 0, hst = 0, total = 0, a = 0;
    printf("Welcome to the IPC company's computer System calculator\n");
    printf("Enter the package desired \n");


    printf("(1:basic, 2:professional, 3:game system)\n");
    scanf("%d", &c);


    switch (c){

        // if the user chooses the basic option
    case 1:

        printf("Enter additional memory required\n");
        printf("(0: 4 GB included, 1: 8 GB, 2: 12 GB)\n");
        q = scanf("%d", &q);
        // The additional amount that needs to be added to the package, based on user's choice


        switch (q){
        case 1:
            memory = 99;
        case 2:
            memory = 189;
        case 0:
            memory = 0;
        }

        printf("Enter monitor required\n");
        printf("(0: 21 inch LED included, 1: 27 inch LED )\n");
        w = scanf("%d", &w);

        switch (w){
        case 0:
            monitor = 0;
        case 1:
            monitor = 199;
        }
        printf("Enter Hard Drive required\n");
        printf("(0: 512 GB included, 1: 128 GB SSD )\n");
        f = scanf("%d", &f);

        switch (f){
        case 0:
            hard = 0;
        case 1:
            hard = 119;
        }
        subtotal = memory + monitor + hard + 599;
        hst = subtotal*(13 / 100);
        total = hst + subtotal;


        // invoices 

        printf("basic package: 599.00\n");

        // price of memory based on user's choice
        if (q = 1){
            printf("8 GB Memory: 99.00\n");
        }
        else if (q = 2){
            printf(" 12 GB Memory: 189.00\n");
        }
        else {
            printf("4 GB Memory: 0.00\n");
        }

        // price of monitor base on user's choice

        if (w = 1){
            printf("27 inch LED Monitor : 199.00\n");
        }
        else
        {
            printf("21 inch LED Monitor: 0.00\n");
        }

        // price of hard drive based on user's choice
        if (f = 1){
            printf("128 GB Hard Drive: 119.00\n");
        }
        else{
            printf("512 GB Hard Drive: 0.00\n");
        }

        printf("sub total: %.02f\n ", subtotal);
        printf("HST: %.02f\n", hst);
        printf("Total: %.02f\n", total);

        break;

5 个答案:

答案 0 :(得分:2)

scanf

的用法

您的第一个scanf("%d", &c)是正确的。

但稍后当您执行此操作时:q = scanf("%d", &q) q的作业并不能完成您的想法。

只需在scanf("%d", &some_variable)之前some_variable =处使用scanf,这就是使用scanf的正确方法。


整数除法

分部13 / 100将始终显示为0。原因是,因为13100都是整数,所以执行整数除法,因此结果也是整数。 13/100将为0.13,但向下舍入为0,表示为整数。

解决方案是使数字浮点数,如下所示:

13.0 / 100.0

现在执行浮点除法,结果为0.13,完全符合要求。


==

的比较

当您使用=时,您正在使用==进行比较。例如:

if (q = 1)

以上行将1分配给qq1进行比较。比较,写:

if (q == 1)

并替换您尝试与=进行比较的所有地方。


printf格式说明符

printf("sub total: %.02f\n ", subtotal);

您已指定用于输出printf值的f格式说明符double。即您尝试将subtotal打印为double值,但subtotal被声明为int。这就是为什么它只输出0.0

要解决此问题,请将f替换为d以输出整数值(然后您不需要.02来指定小数位):

printf("sub total: %d\n ", subtotal);

或者,如果您希望subtotal为浮点数,则将double声明为double subtotal = 0.0; ,也可以表示小数点后的数字:

%.02f

对于您尝试使用{{1}}输出的所有值执行此操作。


结论

我建议你一点一点地编写代码。只有当您确定旧代码100%正确运行时,才添加新内容。这样,很多错误不会立即出现。

答案 1 :(得分:0)

我在代码中发现的一个问题是

q=(scanf.........

使用它,它将起作用

scanf("%d",&q)

您还需要修复switch声明:

    switch (q){
    case 1:
        memory = 99;
        break;  // Without a break the program will continue and aexcute the code in the next case too!
    case 2:
        memory = 189;
        break;
    case 0:
        memory = 0;
    }

答案 2 :(得分:0)

if (q = 1)&lt; - 这总是正确的,不能是假的,因为它将1的值赋给q然后评估该语句,它总是{{ 1}}并且总是布尔值为真。

1&lt; - 这是为了比较,或者更好的是,将常数放在第一位 if (q==1)&lt; - 如果你混淆1或2等号,就会出现编译错误。

你也应该发出警告,阅读所有警告并解决这些问题。

答案 3 :(得分:0)

=是赋值运算符

==是等号运算符

如果翻转操作数,则会出现错误,因为您不能1 = w(分配给文字),但可以1 == w(检查相等)

asignment运算符返回对同一对象的引用,所以你基本上做的是:

q = 1;
if (q)

总是如此,因为1是&#34;是&#34;。

答案 4 :(得分:0)

  

q = scanf(&#34;%d&#34;,&amp; q);

这不会起作用,因为&#39; scanf&#39; function返回它作为输入读取的项目数。 相反,请使用:scanf("%d",&q)