C++ 代码在一个带点的wser之后中断,并跳过代码的其余部分

C++ 代码在一个带点的wser之后中断,并跳过代码的其余部分,c++,for-loop,C++,For Loop,如果我不使用像1.5这样的点,它会断开,但如果它是像15这样的整数,它就完美地工作了 我试图在互联网上寻找它,但没有找到修复它的方法 #include <iostream> using namespace std; int main() { int n,sk,i,a,p,b,c; int kiek=0; cout << "insert how many shops did he went to" << endl; cin >

如果我不使用像1.5这样的点,它会断开,但如果它是像15这样的整数,它就完美地工作了

我试图在互联网上寻找它,但没有找到修复它的方法

#include <iostream>
using namespace std;
int main()
{
    int n,sk,i,a,p,b,c;
    int kiek=0;
    cout << "insert how many shops did he went to" << endl;
    cin >> n;
    b=n;
    cout << "how many thing did he buy in every shop" << endl;
    cin >> p;
    c=p;

   for(int n=0; b>n; n++)
    {
    a=0;
    for (int i=1; i<=c; i++)
    {
        cout << "insert "<< i << " product price"<< endl;
        cin >> sk;
        a=a+sk;
        }
          cout<< "spent " << a<< " pmoney"<< endl;
}
    return 0;
}
它应该让我输入他在每个产品上花了多少钱,但如果我添加一个。它跳过所有内容,只显示一个问题

整数类型不能存储十进制值

当您执行int-sk时;cin>>sk;输入1.5,操作符>>将在sk中存储1,并在流中保留.5。下次执行cin>>sk时,流将尝试读取流中剩余的下一个整数,但将失败,因为。无法转换为整数,使流处于“失败”状态。对于这一点,所有cin指令将无法读取下一个整数

解决方案


为了解决这个问题,我建议将价格值声明为double:double a,sk。但是,如果输入无效的浮点值,也会出现同样的问题。我强烈建议正确管理流错误并做出相应的反应。您可以使用或其相关方法good、fail、bad、eof访问状态。

我使用3表示存储,5表示amount无法存储小数点。使用double或float。