我是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;
答案 0 :(得分:2)
scanf
您的第一个scanf("%d", &c)
是正确的。
但稍后当您执行此操作时:q = scanf("%d", &q)
q
的作业并不能完成您的想法。
只需在scanf("%d", &some_variable)
之前some_variable =
处使用scanf
,这就是使用scanf
的正确方法。
分部13 / 100
将始终显示为0
。原因是,因为13
和100
都是整数,所以执行整数除法,因此结果也是整数。 13/100将为0.13,但向下舍入为0,表示为整数。
解决方案是使数字浮点数,如下所示:
13.0 / 100.0
现在执行浮点除法,结果为0.13
,完全符合要求。
==
当您使用=
时,您正在使用==
进行比较。例如:
if (q = 1)
以上行将1
分配给q
。 不将q
与1
进行比较。比较,写:
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)