Постоянно выдает 0 в возвращаемом значении, хотя не должен
пишу примитивный калькулятор с использованием ООП в С++. Но, что бы не написать, он всегда выдает 0, хотя не должен, никак понять не могу, почему.
Так, к примеру, на простую операцию 5+1 должен выводить 6, но получается 0:
main.cpp
#include "Header.h"
using namespace std;
int main() {
int temp, temp2;
char sign;
cin >> temp >> sign >> temp2;
Class1 obj(temp, sign, temp2);
cout << obj.Operation();
}
Header.h
#ifndef Class1_H
#define Class1_H
class Class1 {
private:
int temp, temp2, sign;
public:
int Operation();
Class1(int num1, int Sign, int num2);
};
#endif
Source.cpp
#include <iostream>
#include "Header.h"
using namespace std;
Class1::Class1(int num1, int Sign, int num2) {
temp = num1;
sign = Sign;
temp2 = num2;
}
int Class1::Operation() {
int ascii = sign;
int res;
switch (ascii) {
case 43:
res = temp + temp2;
case 45:
res = temp - temp2;
case 42:
res = temp * temp2;
case 37:
res = temp % temp2;
}
return res;
}
Ответы (1 шт):
Для начала перепишем ваш код с использованием литералов символов, а не жутких кодов - так понятнее:
switch (ascii) {
case '+':
res = temp + temp2;
case '-':
res = temp - temp2;
case '*':
res = temp * temp2;
case '%':
res = temp % temp2;
}
Итак, 5 + 1. Управление передается ветви case '+'. Выполняется суммирование.
Дальше, раз нет break, управление передается ветви case '-', за ней... - словом, до последней строки, которая и вычисляет остаток от деления 5 на 1...
Вот так
switch (ascii) {
case '+':
res = temp + temp2;
break;
case '-':
res = temp - temp2;
break;
case '*':
res = temp * temp2;
break;
case '%':
res = temp % temp2;
break;
}
будет правильнее. Но что вы будете делать, если пользователь введет какой-то иной знак? Ведь ветви default у вас нет...