Я использую правильный спецификатор формата? - PullRequest
0 голосов
/ 26 апреля 2019

Я написал простую программу-калькулятор, результат которой всегда отображается как -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 ]

1 голос
/ 26 апреля 2019

Ваши спецификаторы формата верны, но вы умножаете 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.

1 голос
/ 26 апреля 2019

Умножение должно быть рассчитано со значениями.Я переместил "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;
0 голосов
/ 26 апреля 2019

Вы используете правильный формат, если притворяетесь, что работаете со значениями 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...