Понимание цикла while и разница в "! "и "ложь" в C++
Я пытаюсь понять цикл while и разницу, когда я ставлю "!" и "false" в качестве условия, потому что каким-то образом они дали мне другой результат.
Я пишу эту очень простую программу для суммирования массива чисел, и я хочу проверить, является ли мой ввод целочисленным или нет.
Блок-схема :
- 1. Спросите пользователя, сколько чисел нужно суммировать
- 2. Получить ввод пользователя (проверить, если это целое число или нет)
- 3. (цикл) попросите пользователя ввести каждое значение числа
- 4. сумма их
Что я уже пробовал:
Это мой код, я использую `isdigit`, чтобы проверить, является ли вход целым числом, и проверить его с помощью while (isdigit(array_size==false))
#include <iostream> using std::cout; using std::cin; using std::endl; int array_size; int sum = 0; int main(){ cout << "How many numbers ? " << endl; cin >> array_size; while (isdigit(array_size==false)){ cout << "Input is not a number " << endl; break; } int sum_array[array_size]; for (int n=0; n < array_size; n++){ cout << "Number " << n+1 << " is : "; cin >> sum_array[n]; sum+=sum_array[n]; } cout << "Sum of numbers are : " << sum << endl; return 0; }
Вот результат, когда я попытался ввести целое и нецелое число :
lock@lock ./a.out How many numbers ? 3 Number 1 is : 1 Number 2 is : 2 Number 3 is : 3 Sum of numbers are : 6 lock@lock ./a.out How many numbers ? a Sum of numbers are : 0
Смотрите, что во втором случае, когда я ставлю нецелочисленное число, моя строка
cout << "Input is not a number " << endl;не исполняется.
Теперь, если бы я изменил свое состояние с помощью while (!isdigit(array_size)) вот вам и результат :
lock@lock ./a.out How many numbers ? 3 Input is not a number Number 1 is : 1 Number 2 is : 2 Number 3 is : 3 Sum of numbers are : 6 lock@lock ./a.out How many numbers ? a Input is not a number Sum of numbers are : 0
Видимо линия
cout << "Input is not a number " << endl;будет выполняться независимо от того, какие входные данные (даже если это целое число). Чего мне здесь не хватало ? Чем же "!" отличается от "ложного".
KarstenK
код сбивает с толку. Вам нужно улучшить проверку и поток кода на ошибку.