错误是在我运行程序并输入n
以结束选择时
它不会结束并不断重复第一个cout
和默认值:
#include <iostream>
using namespace std;
int main()
{
int x;
float y,result=0,paid,change;
do {
cout<<"enter another choose or press (n/N) to end choosing ";
cin>>x;
switch (x)
{
case 1:
{
int a=5;
cout<<"enter the wighte you want in (Kg) : ";
cin>>y;
result=a*y;
break;}
default:
cout<<"wrong choooose "<<endl;
}
}
while (x='n');
cout<<"your total= "<<result<<endl;
cout<<"mony value paid = ";
cin>>paid;
change =paid-result;
cout<<"the change = "<<change<<endl;
return 0;
}
答案 0 :(得分:2)
问题是x
是一个整数,然后将其与字符文字进行比较。
这在使用旧的C风格标准I / O时效果很好,它使用int
而不是char
,但在类型不同的C ++中不起作用。这意味着行上的输入
cin>>x;
如果您没有输入有效的整数,将失败。
将x
的类型更改为char
,它应该有效。
分配问题而不是while
内的条件。
答案 1 :(得分:2)
抱歉,我完全错过了你在这里使用C ++ I / O.
您将x
声明为int
,但输入字符文字'n'
。转换将因C ++ I / O流而失败,因此永远不会设置x
。不要混淆您的数据类型;如果您想阅读char
,请阅读char
,int
也一样。
尝试这样的事情:
int x = 0;
do {
if(!(cin >> x)) {
cout << "enter a valid number" << endl;
// clear fail flag
cin.clear();
// consume newline
cin.ignore(std::numeric_limits<streamsize>::max(), '\n');
} else {
// your logic here
}
} while( x != -1 );
while (x='n');
这不是比较,它是一个赋值,转换为整数时的字符'n'
将始终计算为true
,因此您的循环永远不会结束。
您的下一个问题是,当输入 'n'
时,您想要退出循环,而不是相反,所以它应该是......
while(x != 'n');
同时意识到,如果用户输入110
,循环将退出。 x
是int
,字符文字'n'
的整数值是110
。 'N'
也会失败。