Код разбивается после anwser с точкой и пропускает остальную часть кода - PullRequest
0 голосов
/ 03 мая 2019

Если я не использую точки, такие как 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;
}

это должно позволить мне напечатать, сколько он потратил с каждым продуктом, но если я добавлю.он пропускает все и показывает только один

1 Ответ

0 голосов
/ 03 мая 2019

Задача

Целочисленный тип не может хранить десятичные значения.

Когда вы выполните int sk; cin >> sk; и введете «1.5», operator >> сохранит 1 в sk и оставит .5 в потоке. В следующий раз, когда вы выполните cin >> sk, поток попытается прочитать следующее целое число с тем, что осталось в потоке, но потерпит неудачу, потому что "." не может быть преобразовано в целое число, оставляя ваш поток в состоянии «сбой». Для этого момента все инструкции cin не смогут прочитать следующее целое число.

Решение

Чтобы решить эту проблему, я предлагаю объявить значения цен как удвоенные: double a,sk. Однако та же проблема возникнет, если вы введете недопустимое значение с плавающей запятой. Я настоятельно рекомендую правильно управлять ошибками потока и реагировать соответствующим образом. Вы можете получить доступ к состоянию, используя rdstate() или связанные с ним методы (хороший, неудачный, плохой, eof).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...