Простая программа-калькулятор на C / C++

Я пытаюсь заставить эту программу показать мне, что когда я решаю задачу сложения, вычитания, умножения или деления, она даст мне ответ. Однако это не работает, может кто-нибудь помочь.

int main ()
{  
  int choice;  
  float a, b;  
  float sum;  
  float difference;
  float product;
  float quotiont;

  printf("This program adds, subtracts, multiplies, and divides.\n");  
  printf("**************\n");  
  printf("* Calculator *\n");  
  printf("**************\n");  
  printf("Enter an expression: ");  
  scanf("%f %f", &a, &b);  
  scanf("%f %f %f %f", &sum, &difference, &product, &quotiont);  

  sum = a + b;  
  difference = a - b;  
  product = a * b;  
  quotiont = a / b;  

  if (a + b)  
      printf("Answer = %f\n", &sum);  
  else if (a - b)  
      printf("Answer = %f\n", &difference);  
  else if (a * b)  
      printf("Answer = %f\n", &product);  
  else if (a / b)  
      printf("Answer = %f\n", &quotiont);  
  else  
      printf("Error");  
}

Отмечено как не специфичное для UNIX. Кому-то нужно отредактировать заголовок (если это возможно?), Так как это тоже не имеет отношения к Putty ...

Airsource Ltd 07.11.2008 06:48

Никакого отношения к C++ тоже не имеет

Airsource Ltd 07.11.2008 06:49

Отредактировал заголовок, сохранил C++, поскольку он является действительный код C++ ... (и Майк может не знать разницы.)

Jeremy Ruten 07.11.2008 07:05
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
11 806
3

Ответы 3

Вы неправильно написали частное.

На самом деле, не передавайте адрес своих аргументов в printf. Вам нужно сделать это только для scanf. Сделайте, например, printf ("Ответ =% f \ n", частное);

Эээ, и все это если ... иначе, если ... в конце все просто шатко. Выньте это.

И почему вы сканируете результаты своих расчетов? Убери и это тоже.

Чего вы пытаетесь достичь с помощью этой строчки?

scanf("%f %f %f %f", &sum, &difference, &product, &quotiont);  

Это берет четыре числа от пользователя и загружает их в четыре переменные соответственно. Сразу после этой строки вы присваиваете новые значения этим четырем переменным, поэтому нет смысла загружать их значениями в этой строке кода.

Кроме того, в чем смысл следующего заявления if? (И все заявления else if)

if (a + b)
    printf("Answer = %f\n", &sum);

Ответ будет напечатан только в том случае, если сумма a и b отлична от нуля. Если выражение в скобках после 'if' равно нулю, оно не выполнит код ниже. Если он оценивает ненулевое значение, он выполнит код.

Другая проблема с приведенной выше строкой заключается в том, что вы передаете указатель на переменную sum функции printf () вместо фактического значения переменной sum. '& sum' возвращает адрес в памяти переменной, а 'sum' возвращает фактическое значение переменной. Так должно получиться так:

printf("Answer = %f\n", sum);

Я заметил, что вы определили переменную choice в верхней части своей программы, но никогда ее не использовали. Из-за этого и вашей цепочки операторов else if я предполагаю, что вы хотите дать пользователю выбор: складывать, вычитать, умножать или делить.

Для этого я бы определил choice как char (символ) вместо int и попросил бы пользователя ввести один из этих четырех символов, которые будут назначены переменной choice: '+', '-', '* 'или' / '.

Чтобы определить choice как символ, напишите следующее:

char choice;

Затем попросите пользователя ввести такой вариант:

scanf("%c", &choice);

Это берет один символ от пользователя и назначает его choice.

Наконец, измените свои операторы if на что-то вроде этого:

if (choice == '+')
    printf("Answer = %f\n", sum);
else if (choice == '-')
    printf("Answer = %f\n", difference);
else
    printf("Error: invalid choice.\n");

Вы также можете использовать для этого оператор switch.

Вы можете предоставить пользователю варианты ввода, например, 1,2,3,4 для каждого из сложения, вычитания, умножения и деления.

user2560622 16.07.2013 15:22
#include<stdio.h>
#include<conio.h>


int main ()
{   
    int choice;  
    float a, b;  
    float sum;  
    float difference;
    float product;
    float quotiont;

    printf("This program adds, subtracts, multiplies, and divides.\n");  
    printf("**************\n");  
    printf("* Calculator *\n");  
    printf("**************\n");  
    printf("Enter thee value of a: ");  
    scanf("%f",&a);
    printf("Enter the value of y:");
    scanf("%f",&b);
    sum=a+b;
    if (sum = a + b);  
        printf("sum is %f",sum);

    difference = a - b;  
    if (difference=a-b)
        printf("\n difference is %f",difference);

    product = a * b;  
    if (product=a*b)
        printf("\n product is %f",product);

    quotient = a / b;  
    if (quotient=a/b)
    printf("\n quotient is %f",quotient);

    return(main());
}
-1 Это код пронизанный с ошибками. Сравнение равенства - это ==, а не =. Вы также разрушили логику калькулятора. После if нельзя ставить точку с запятой, если вы ожидаете, что они на что-нибудь повлияют. И почему вы возвращаете ад, из main, результат вызова mainбез аргументов? !! (Также conio.h нестандартен.)
michaelb958--GoFundMonica 16.07.2013 15:38

Сладкий Иисус. Я сожалею, что в такие времена нет «Зала стыда за переполнение стека».

Daniel Kamil Kozar 16.07.2013 17:51

Другие вопросы по теме