Помощь по C++

Keorez

Daniil
Забанен
Дней с нами
2.827
Розыгрыши
0
Сообщения
196
Репутация
32
Реакции
187
Вот код. Это в MVS 2015.
#include "help.h"

using namespace std;

void calc();

int main()
{
setlocale(LC_ALL, "Rus");
cout << "Калькулятор - 1" << endl;
string a;
while (cout << "Ввод: ", cin >> a) {
if (a == "1") {
calc();
}
if (a == "exit") {
break;
}
if (a != "1") {
system("cls");
cout << "Калькулятор - 1" << endl;
cout << "Ввод: ";
continue;
}
}
return 0;
}
#include <iostream>
#include <string>

using namespace std;

void calc()
{
float l = 0, o = 0, c = 0;
string a;
char b;
system("cls");
cout << "Калькулятор" << endl;
while (cout << "Ввод: ", cin >> l >> b >> c) {
system("cls");
if (b == '+') {
system("cls");
o = l + c;
cout << "Ответ: " << o << endl;
}
if (b == '-') {
system("cls");
o = l - c;
cout << "Ответ: " << o << endl;
}
if (b == '*') {
system("cls");
o = l * c;
cout << "Ответ: " << o << endl;

}
if (b == '/') {
system("cls");
o = l / c;
cout << "Ответ: " << o << endl;
}
}
}
В общем, вопрос такой. На сколько я сделал все плохо? И можно ли использовать cout в while? (В скобочках.).
 
Последнее редактирование:
В следующий раз выкладывай код на pastebin.com, потому что такой код невозможно читать (то есть съехавший влево)

upload_2017-2-23_22-22-47.png

Зачем ты очищаешь и без того чистую консоль в начале после объявления переменных?

upload_2017-2-23_22-24-36.png

Где проверка на то, будет ли у тебя l, b или c соответственно цифрой/числом/символом/"операндом"?
Может получиться так, что 'I' будет чаром '+', 'b' будет интом '5', а 'c' вообще передан как чар 'хуй', и тогда твои условия пройдут мимо, и в итоге ничего не выйдёт

upload_2017-2-23_22-27-27.png

Вместо этой конструкции из IF'ов лучше использовать switch .. case
Вот документация, почитай: https://msdn.microsoft.com/ru-ru/library/k0t5wee3.aspx
Да и к тому же у тебя нет проверки на дурака (в случае, если все условия неверны, это default в switch)

И в конце нужно было вывести ответ, и спросить пользователя, собирается ли он ещё раз произвести операцию на калькуляторе

Ну это так, навскидку
Даже я такой говнокод на плюсах не пишу
 
  • Like
Реакции: Justman
В следующий раз выкладывай код на pastebin.com, потому что такой код невозможно читать (то есть съехавший влево)

Посмотреть вложение 53480
Зачем ты очищаешь и без того чистую консоль в начале после объявления переменных?

Посмотреть вложение 53481
Где проверка на то, будет ли у тебя l, b или c соответственно цифрой/числом/символом/"операндом"?
Может получиться так, что 'I' будет чаром '+', 'b' будет интом '5', а 'c' вообще передан как чар 'хуй', и тогда твои условия пройдут мимо, и в итоге ничего не выйдёт

Посмотреть вложение 53482
Вместо этой конструкции из IF'ов лучше использовать switch .. case
Вот документация, почитай: https://msdn.microsoft.com/ru-ru/library/k0t5wee3.aspx
Да и к тому же у тебя нет проверки на дурака (в случае, если все условия неверны, это default в switch)

И в конце нужно было вывести ответ, и спросить пользователя, собирается ли он ещё раз произвести операцию на калькуляторе

Ну это так, навскидку
Даже я такой говнокод на плюсах не пишу
Так я же даун. Да, я уже сделал код через свитч. Но вот как сделать проверку. Если я ее не сделал, то я не знаю как. Ты юзни код и узнаешь зачем cls использую. И да, на "спросить пользователя". Ты июзни код и узнаешь.
П.С.С. Чего бля? В чаре 3 знака? В чаре максимум 1 знак.
 
Последнее редактирование:
Так я же даун. Да, я уже сделал код через свитч. Но вот как сделать проверку. Если я ее не сделал, то я не знаю как. Ты юзни код и узнаешь зачем cls использую. И да, на "спросить пользователя". Ты июзни код и узнаешь.
Я думал, это мейн
Где твой main?
 
main в app.cpp (Выше.)
Ты юзни код и узнаешь зачем cls использую
И да, на "спросить пользователя". Ты июзни код и узнаешь.
Ну я мейна не вижу, не могу знать, что там
П.С.С. Чего бля? В чаре 3 знака? В чаре максимум 1 знак.
Это я сплю просто за компом, машинально написал
string 'хуй'
 
Ну я мейна не вижу, не могу знать, что там

Это я сплю просто за компом, машинально написал
string 'хуй'
--Ссылка удалена--, и вот что, использовать свитч я отказался. Лучше использовать while. Так как цикл в свитче не получается, а вот вайл + иф все нормально или поясни мне как будет правильно сделать цикл в свитче.
п.с.с. Там надо убрать один cout<<"Ввод: "; , я уже убрал.
 
Пиздец какие-то программисты собрались, я все еще паскаль юзаю в 16 лет
 
Ну я мейна не вижу, не могу знать, что там

Это я сплю просто за компом, машинально написал
string 'хуй'
Значит я сделал цикл с вайл и свитч. Но в чем разница? Итог один и тот же. Разницы в байтах практически нет. Или будет из-за if больше нагрузка?
 
--Ссылка удалена--, и вот что, использовать свитч я отказался. Лучше использовать while. Так как цикл в свитче не получается, а вот вайл + иф все нормально или поясни мне как будет правильно сделать цикл в свитче.
п.с.с. Там надо убрать один cout<<"Ввод: "; , я уже убрал.
Всё очень очень плохо
Не стоит писать громоздкие конструкции, когда всё можно уместить в пару строк
А лучше сделай постоянную проверку, пока не будет знака '=' (равно)
То есть запрашивай число, после чего операнд
И так до тех пор, пока не выдаст "="
После каждого ввода операнда выводи ответ

Если при вводе операнда будет введено число, то присваивай его даблу/флоату, будто оно введено впервые
Значит я сделал цикл с вайл и свитч. Но в чем разница? Итог один и тот же. Разницы в байтах практически нет. Или будет из-за if больше нагрузка?
Разница? Никакая.
Свитч удобен для чтения (удобный синтаксис), и в практике не надо писать лишнее
if
else if
........else if
................else if
else

Вместо
switch
case
case
case
default
--Ссылка удалена--
Да, но всё равно громоздко
15, 20, 25, 30 строку и 17, 22, 27 и 32 строку соответственно можешь просто перенести в единственном экземпляре после switch'а, нет смысла её дублировать
А ещё лучше, если бы ты передавал параметры в ф-ию, она уже проверяла операнды, и возвращала результат
Пиздец какие-то программисты собрались, я все еще паскаль юзаю в 16 лет
Погроместы
Тут нет ничего особенного



Дохуя чего можно сказать по теме (деление вещественных чисел с помощью '/', например)
Я спать, спокойной ночи
Может зайду, если не усну
 
Всё очень очень плохо
Не стоит писать громоздкие конструкции, когда всё можно уместить в пару строк
А лучше сделай постоянную проверку, пока не будет знака '=' (равно)
То есть запрашивай число, после чего операнд
И так до тех пор, пока не выдаст "="
После каждого ввода операнда выводи ответ

Если при вводе операнда будет введено число, то присваивай его даблу/флоату, будто оно введено впервые

Разница? Никакая.
Свитч удобен для чтения (удобный синтаксис), и в практике не надо писать лишнее
if
else if
........else if
................else if
else

Вместо
switch
case
case
case
default

Да, но всё равно громоздко
15, 20, 25, 30 строку и 17, 22, 27 и 32 строку соответственно можешь просто перенести в единственном экземпляре после switch'а, нет смысла её дублировать
А ещё лучше, если бы ты передавал параметры в ф-ию, она уже проверяла операнды, и возвращала результат

Погроместы
Тут нет ничего особенного



Дохуя чего можно сказать по теме (деление вещественных чисел с помощью '/', например)
Я спать, спокойной ночи
Может зайду, если не усну
На счет переноски строк - помог нереально. Даже не знал, спасибо. А твое слово "плохо" - это ты ошибся или все на столько плохо?
 
На счет переноски строк - помог нереально. Даже не знал, спасибо. А твое слово "плохо" - это ты ошибся или все на столько плохо?
Я в плане того, что в коде очень много повторений, функция войдовская лишь лишнее обращение вызывает, она же не повторяется, ее наоборот перенести в Мейн, а вообще переписать, и отправлять только текущее значение или операнд, и так до тех пор, пока не равно =
Нет проверок, является ли число числом (примитивный вариант - посимвольный перебор до конца стринга, если встречаются только цифры, то число, если операнд, то операнд), в ином случае начинать заново, если число идет без операнда между ними, и в случае встречи символа выводить ошибку
А вообще лучше заносить все выражение в стринг, и парсить его, решать поочередно, складывать, и выводить
А еще проверки деления на 0 нет, деление двух вещественных чисел, предохранение от ситуации с переполнением, и так далее
 
только начала изучать шарп , а уже от таких слов писаюсь кипятком