аа[2] = 3; аа[3] = 4; аа[4] = 5; аа[5] = 0; аа[6] = 0; аа[7] = 0; аа[8] = 0; аа[9] = 0;
Символ «е», введенный после цифры 5, не является допустимым для целого числа и поэтому ограничивает ввод.
В условиях можно задавать и явный вызов методов. Например, пусть мы хотим посчитать количество символов ' \ п', которым оканчиваются вводимые строки. Это можно сделать, использовав метод get():
int nl = 0;
while(cin.get(ch)) // читать все символы, в том числе пробельные
{ if(ch=='\n') nl++; cout.put(ch);
}
Так как «неправильных» символов не существует, цикл можно завершить только вводом комбинации клавиш Ctrl+Z. Можно использовать и другую форму метода get():
int nl = 0;
while(ch = cin.get() && ch != EOF) // читать все символы
{ if(ch=='\n') nl++; cout.put(ch);
}
Константа EOF помещается в переменную ch при нажатии комбинации Ctrl+Z.
В библиотеке реализована логическая операция operator!, с помощью которой можно проверить аварийное состояние потока, например:
if (!(cin >> х))
{ // ввод завершился неудачей }
Обратите внимание: выражение ввода заключено в скобки. Это необходимо, так как в соответствии с приоритетом операций выражение без скобок интерпретируется так:
(!cin) >> х
Естественно, ввод и проверку состояния потока можно разделить, например:
cin >> х; if (!cin)
{ // ввод завершился неудачей }
Во всех приведенных примерах на месте с i п может стоять любой поток.
При разделении ввода и проверки можно явно вызывать соответствующий метод. Например, таким способом мы можем проверять наступление ситуации конца файла для потока, связанного с файлом:
while (!from.eof()) { getline(from, s);
// явная проверка признака конца файла // чтение строки из потока from
cout << s << endl;
}
Однако тут возможны сюрпризы. По умолчанию ограничителем строки является символ ' \ п', который записан в конце каждой строки. В данном случае при считывании последней строки состояния eof файла не возникает — она возникает только при попытке ввода за концом файла. Поэтому цикл выполнится лишний раз и на экране дважды появится последняя строка.
Правильная последовательность операторов может быть такой:
getline(from, s); // чтение строки из потока from
while (!from.eof()) // явная проверка признака конца файла
{ cout << s << endl;
getline(from, s); // чтение строки из потока from
}
Хотите новый дизайн для сайта - http://itcreators-group.com/web-design/ тут.
Другой вариант — бесконечный цикл с проверкой ситуации конца файла внутри цикла:
wtiile (true)
{ getline(from, s); // чтение строки из потока from
if(from.eof()) break; // явная проверка признака конца файла cout << s << endl;
}
|