1

Тема: Do ... while помилка

Всім привіт, написав програму по даній умові: Підраховувати суму парних чисел, серед цілих чисел, що вводяться користувачем, поки не буде введений 0.

Ось як я зробив її, однак якщо я введу наприклад число 2.5, то воно видасть суму одно 2, як написати код так, що б при введенні дробового числа видавалася помилка.

#include<iostream>
using namespace std;
int main()
{
    setlocale(LC_CTYPE, "ukr");
    int main j = 0, k;
    cout << "Введіть числа: ";
    do{
        cin >> k;
        if (k % 2 == 0)
        {
            if (k - (int)k == 0) {
                j += k;
            }
            else (cout << "Число не ціле" << endl);
        }
        else (cout << "Число не парне" << endl);
    } while (k != 0);
    cout << "Сумма четных, целых чисел равна:" << j << endl;
}

2

Re: Do ... while помилка

Не думаю що це хороший варіант але можна спробувати так..

#include <cmath>

....

double k, intpart, fractpart;
cin >> k;
fractpart = modf(k , &intpart);

if(fractpart > 0)
{
  // виводимо помилку
}

3

Re: Do ... while помилка

1. Це український форум, а в умові нічого не сказано про іноземну мову в програмі.
2. Ваша помилка не стосується do...while, назва теми не інформативна.
3. Робіть відступи, програму читати неприємно.
4. Давайте змінним зрозумілі імена - sum замість j виглядало б значно природніше.
5. Ви точно певні, що це компілюється, особливо рядок 6?
Тепер по вашій проблемі з цілими. Слід розуміти, що є два (насправді більше) типи чисел - цілі (int) та з рухомою комою (float). Якщо ви вводите число типу int, і воно ввелося, то все після коми ВЖЕ відкинуто (точніше, не оброблено), і перевірки не допоможуть: число типу int ціле завжди. Вам треба перевіряти, чи не ввів користувач чогось, крім цілих чисел і розділювачів (пробілів і знаків нового рядку); для цього слід перевіряти вхідний потік, досить простим, але неочевидним способом:

int x;
cin >> x;//ввели число
if(cin) {//перевіряємо - чи воно дійсно ввелося
    cout << "Ви ввели " << x;
} else {
    cout << "Помилка! Треба ввести число!";
}

Помилку виявляти ви вже знаєте, як; лишилося розібрати, як її виправити, щоб можна було вводити числа далі (cin не буде працювати після першої помилки). Для цього треба викликати cin.clear(); але цього не досить - бо якщо там введена крапка ".", то вона лишається в буфері введення, і наступна операція введення її прочитає і викличе ту саму помилку. Треба очистити буфер, прочитавши все до кінця рядка:

cin.clear();
char c;
do {
    cin >> c;
} while(c != '\n');
Подякували: NaharD, Arete, leofun013