Другие языки программирования и технологии

Идет переопределение в C++

Есть задание: с клавиатуры последовательно вводятся количество товара и его сорт (1 или 2). Ввод автоматически прекращается, как только будет введено нулевое количество товара. Определить товаров какого сорта было получено больше. kt - кол-во товара, ssrt1 и 2 это суммы количества товаров по сортам соответственно, выводят ошибки указанные на скрине, как решить проблему?

З. Ы. я студент первого курса и за мой недокод не бейте плз))
#include <iostream>
using namespace std;
int main() {
setlocale(LC_CTYPE, "Russian");
auto q1 = 0U, q2 = 0U;
while (true) {
cout << "Количество: ";
unsigned q;
cin >> q;
if (0 == q) break;
cout << "Сорт: ";
unsigned s;
cin >> s;
switch (s) {
case 1: q1 += q; break;
case 2: q2 += q; break;
}
}
cout
<< "Товаров "
<< (q1 > q2 ? "I" : "II")
<< " сорта больше\n";
system("pause");
}
Владимир Михайлов
Владимир Михайлов
61 999
Лучший ответ
А если использовать массив не потребуется ни if ни switch :)
double s[2]={0,0};
while(1){
cin>>k;
if(k==0)break;
cin>>srt;
s[srt-1]+=k;
}
cout<<(s[0]>s[1]?"1 sort":"2 sort");
Толя Усков
Толя Усков
84 385
Maksat Amirbekov И вот не могу понять зачем для количества товаров использовать double? Я понимаю что у автора так написано, но вы бы тот же тип использовали или нет. На склад пришло 3.75 телевизоров, а потом еще 2.25 и получается всего 6 телевизоров!)))
Вам уже ответили. Только обозначу что переопределение в данном случае это когда вы создаете две переменные с одним и тем же именем и компилятор не знает какой переменной отдать предпочтение!

Можно писать так:

double ssrt1 = 0; //и далее просто пользоваться этой переменной

либо так:

double ssrt1;
ssrt1 = 0; // Переходить на следующую строку не обязательно, но точка с запятой, что бы обозначить конец операции, обязательна. Переход сделан только для наглядности. Обычно программисты и пишут код что-бы был нагляднее, потому что читать код приходится больше чем кодить.
ИЗ
Игорь Зябкин
15 408
Интересный способ создания переменных, объявил и в той же строчке присвоил значение, ну разумисты юные.
Убрать: double kt, srt, ssrt1, ssrt2, ssrt1 = 0, ssrt2 = 0;
Замутить: double kt, srt, ssrt1 = 0, ssrt2 = 0;
Kubany4Bek Soltonbekov
Kubany4Bek Soltonbekov
2 002
Эмммм, я тоже не шарю, но что будет, если ssrt1=0 ssrt2=0 перенести на новую строку?
У вас по моему дичь написана в 7 строчке . Вы сначала определили переменную, потом определили её же, только присвоив 0 . Тут два арианта могут быть .
double kt, str,ssrt1,ssrt2;
ssrt1=0;
ssrt2=0;
или
double kt, str,ssrt1=0,ssrt2=0;