我编写的代码具有2种情况,其中一种是用户输入一些数字的选项,另一种是将用户的两个数字相乘的选项,但是我遇到了错误。我对编程完全陌生。
struct proizvod
{
char materijal;
int k; // kolicina
int c; // cijena
};
int main()
{
int izbor;
cout << endl
<< " 1 - Unos podataka.\n"
<< " 2 - Rezultat.\n"
<< " 3 - Izlaz.\n"
<< " Unesi broj i pritisni enter: ";
cin >> izbor;
switch(izbor)
{
proizvod p;
case 1:
cout << "\nUnesite ime proizvoda: ";
cin.get(p.materijal);
cout << "\nUnesite kolicinu proizvoda: ";
cin >> p.k;
cout << "\nUnesite cijenu proizvoda: ";
cin >> p.c;
break;
case 2:
int r;
r = p.k * p.c; // multiply
while (izbor!= 3);
}
return 0;
}
错误C2086'int r':重新定义ConsoleApplication1
答案 0 :(得分:2)
您的代码中存在几个问题:
cin >> izbor;
的输入(或在1之后输入的任何字符) p.k * p.c
,则行为未定义while (izbor!= 3);
,因为 izbor 的值为2,并且不能更改为值3,所以循环永远不会结束。如果我了解您的希望,您想要的是类似的东西,即使仍然需要 string ,仍然仅对 proizvod 使用 char :< / p>
#include <iostream>
using namespace std;
struct proizvod
{
char materijal;
int k; // kolicina
int c; // cijena
};
int main()
{
proizvod p;
bool pSet = false;
for (;;) {
cout << endl
<< " 1 - Unos podataka.\n"
<< " 2 - Rezultat.\n"
<< " 3 - Izlaz.\n"
<< " Unesi broj i pritisni enter: ";
int izbor;
if (!(cin >> izbor)) {
cerr << "the choice is not an integer, abort" << endl;
return -1;
}
switch (izbor) {
case 1:
cout << "\nUnesite ime proizvoda: ";
if (!(cin >> p.materijal)) {
cerr << "premature EOF" << endl;
return -1;
}
cout << "\nUnesite kolicinu proizvoda: ";
if (!(cin >> p.k)) {
cerr << "quantity is not an integer, abort" << endl;
return -1;
}
cout << "\nUnesite cijenu proizvoda: ";
if (!(cin >> p.c)) {
cerr << "price not an integer, abort" << endl;
return -1;
}
pSet = true;
break;
case 2:
if (!pSet)
cerr << "you did not enter the price and quantity" << endl;
else
cout << "Rezultat : " << p.k * p.c << endl;
break;
case 3:
return 0;
default:
cerr << "invalid choice" << endl;
}
}
return 0; // cannot be reach
}
我更愿意为新句子使用英语,以免冒险
编译和执行:
pi@raspberrypi:/tmp $ g++ -g -pedantic -Wextra -Wall c.cc
pi@raspberrypi:/tmp $ ./a.out
1 - Unos podataka.
2 - Rezultat.
3 - Izlaz.
Unesi broj i pritisni enter: aze
the choice is not an integer, abort
pi@raspberrypi:/tmp $ ./a.out
1 - Unos podataka.
2 - Rezultat.
3 - Izlaz.
Unesi broj i pritisni enter: 4
invalid choice
1 - Unos podataka.
2 - Rezultat.
3 - Izlaz.
Unesi broj i pritisni enter: 2
you did not enter the price and quantity
1 - Unos podataka.
2 - Rezultat.
3 - Izlaz.
Unesi broj i pritisni enter: 1
Unesite ime proizvoda: a
Unesite kolicinu proizvoda: 2
Unesite cijenu proizvoda: 33
1 - Unos podataka.
2 - Rezultat.
3 - Izlaz.
Unesi broj i pritisni enter: 2
Rezultat : 66
1 - Unos podataka.
2 - Rezultat.
3 - Izlaz.
Unesi broj i pritisni enter: 3
pi@raspberrypi:/tmp $
如您所见,我还检查了cin >>
是否成功,如果发生错误,我只是中止执行,但也可以刷新无效的输入以重做。