Я в тупике об этом. Поэтому я написал код, чтобы попытаться объяснить его. Мне было интересно, почему я могу хранить числа или символы, даже если я не запрашивал ввод с помощью cin
или getline
? Единственное, о чем я могу думать прямо сейчас с моими ограниченными знаниями, это "while (!(cin >> num1)
)", но опять же, почему цикл while выполнял условие?
#include <iostream>
#include <limits>
using namespace std;
int main()
{
int num1;
cout << "Please enter a number: ";
while (!(cin >> num1))
{
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "Invalid input. Try again: ";
}
}
выражение
cin >> num1
является оперативным и выразительным. Функция >> сохраняет вход в num1 и одновременно возвращает логическое значение. При успешном чтении/хранении cin >> num1 возвращает 0, а условный цикл while выглядит следующим образом:
while(!(0)){ //code }
эквивалентно
while(1){ //code }
эквивалентно
while(true){ //code }
поэтому, когда cin >> sum1 успешно работает, цикл продолжается.
неудавшееся чтение/хранение из cin >> num1 возвращает, я верю 1, который вычисляет false в условии while while.
while(!(1)){ //code }
эквивалентно
while(false){ //code }
и контур заканчивается здесь
while
цикл делать, кроме выполнения условия? Можете ли вы придумать причину , чтобы написатьwhile
цикл , который не выполнить условие по крайней мере один раз , чтобы решить , нужно ли выполнить код в цикле или нет?