我使用的是正确的格式说明符吗?

时间:2019-04-26 15:29:17

标签: c

我写了一个简单的计算器程序,结果总是-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;
}

我使用了错误的格式说明符还是其他格式?

3 个答案:

答案 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初始化之前,将num2scanf相乘。如果在调用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)

如果您假装使用longfloat值,则使用的格式正确。

但是您必须移动代码以将*的情况下的数字乘以。在那一刻,您已经读取了值。

#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;
}
相关问题