我写了一个简单的计算器程序,结果总是-0.00000000 这是代码的一部分:
int main() {
char symbol;
double num1, num2;
double total_multi = num1*num2;
scanf("%lf %c %lf", &num1, &symbol, &num2);
switch(symbol){
case '*': printf("The answer is: %lf * %lf = %lf", num1,
num2, total_multi );
break; }
return 0;
}
我使用了错误的格式说明符还是其他格式?
答案 0 :(得分:1)
必须使用值来计算总数。我移动了“ total_multi = num1 * num2;”进入循环。
char symbol;
double num1, num2;
double total_multi;
scanf("%lf %c %lf", &num1, &symbol, &num2);
switch(symbol){
case '*':
total_multi = num1*num2;
printf("The answer is: %lf * %lf = %lf", num1, num2, total_multi );
break; }
return 0;
答案 1 :(得分:1)
您的格式说明符是正确的,但是您要在num1
初始化之前,将num2
与scanf
相乘。如果在调用total_multi
之后移动scanf
的初始化,则不会出现此问题。
此外,在使用scanf
读取用户输入内容时,强烈建议您检查其返回值是否与格式字符串中的格式说明符数匹配:
double num1, num2;
double total_multi;
if(scanf("%lf %c %lf", &num1, &symbol, &num2) != 3)
{
/* Handle scanf failure */
}
total_multi = num1 * num2;
在不太紧急的情况下,%lf
(而不是printf
)格式的字符串中的scanf
是多余的,因为%f
适用于类型double
,并且float
的值会自动提升为double
。
答案 2 :(得分:0)
如果您假装使用long
和float
值,则使用的格式正确。
但是您必须移动代码以将*
的情况下的数字乘以。在那一刻,您已经读取了值。
#include <stdio.h>
int main() {
char symbol;
double num1, num2, total_multi;
scanf("%lf %c %lf", &num1, &symbol, &num2);
switch(symbol){
case '*':
total_multi = num1*num2;
printf("The answer is: %lf * %lf = %lf", num1, num2, total_multi);
break;
}
return 0;
}