Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
FishZone
2 / 2 / 7
Регистрация: 24.11.2016
Сообщений: 77
#1

Ввод данных используя цикл while (cin >> ) - C++

18.05.2017, 02:22. Просмотров 160. Ответов 3
Метки нет (Все метки)

Здравствуйте, не могу разобрать, как работает одна из инструкций данной программы.
Строка с циклом while ( inFile >> str1 )

В данном цикле inFile класса ifstream связан с объектом класса string, откуда в поток передается символьная строка,
содержащаяся в данном объекте, в другой объект класса string, и пока эти данные передаются, выполняются
остальные инструкции.

Я все пытаюсь понять, как работает передача с помощью inFile и >> в цикле while. Символьная строка сразу полностью
выводится в str1 или выводится отдельно каждый символ и после вывода этого символа начинается выполнение инструкций
цикла? Или как-то еще иначе?

Если что, программу взял из книги.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <fstream>
#include <string>
#include <vector>
int main()
{
string fileName; 
cout << "Введите имя файла: ";
cin >> fileName;
 
if ( fileName.empty() ) {
  // странный случай
  cerr << "Пустое имя файла. Завершение работы.\n";
  return -1;
}
 
ifstream inFile( fileName.c_str() );
 
if ( ! inFile ) {
  cerr << "Невозможно открыть файл.\n";
  return -2;
}
 
string str1;
vector< string > text; 
 
while ( inFile >> str1 ) {
  for ( int ix = 0; ix < str1.size(); ++ix )
      if (( char ch = str1[ix] )=='.') {
        ch = '_';
        str1[ix] = ch;
       }
text.push_back( str1 );
}
 
if ( text.empty() )
return 0;
 
vector<string>::iterator iter = text.begin(),
iend = text.end();
 
while ( iter != -iend ) {
  cout << *iter << '\n';
  ++iter;
}
 
return 0;
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2017, 02:22
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Ввод данных используя цикл while (cin >> ) (C++):

Ввод данных используя цикл while (cin >> )
Здравствуйте, не могу разобрать, как работает одна из инструкций данной...

ввод данных cin >>
Приветствую! #include &lt;iostream&gt; using namespace std; int main()...

Ввод данных в структуру - cin.getline
Добрый день, Задача загрузить информацию в структуку Songs (автор, имя, год)...

Написать, используя цикл for, ввод с клавиатуры 10 чисел
Написать, используя цикл for, ввод с клавиатуры 10 чисел. Цикл может...

Как работает cin.peek, cin,get, cin.ignore, cin.clear?
Здравствуйте, товарищи и не товарищи!:) Я только начал изучать C++, а уже...

Защита от дурака при вводе текста с помощью: cin.get cin.clear cin.sync
Доброго времени суток. На С++ учусь с недавних пор. Имеется стандартная &quot;защита...

3
Antikl
с++
270 / 266 / 144
Регистрация: 15.07.2015
Сообщений: 1,468
Завершенные тесты: 6
18.05.2017, 07:36 #2
C++
1
2
3
4
5
6
7
8
while ( !inFile >> str1 ) {
  for ( int ix = 0; ix < str1.size(); ++ix )
      if (( char ch = str1[ix] )=='.') {
        ch = '_';
        str1[ix] = ch;
       }
text.push_back( str1 );
}
0
zss
Модератор
Эксперт С++
6950 / 6512 / 4133
Регистрация: 18.12.2011
Сообщений: 17,173
Завершенные тесты: 1
18.05.2017, 07:52 #3
Antikl, operator>> возвращает ссылку на istream.
Если операция прошла успешно, то при приведении к bool получится истина.
Так что, отрицание здесь не нужно.
1
Antikl
с++
270 / 266 / 144
Регистрация: 15.07.2015
Сообщений: 1,468
Завершенные тесты: 6
18.05.2017, 07:53 #4
Цитата Сообщение от zss Посмотреть сообщение
Так что, отрицание здесь не нужно.
понял
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.05.2017, 07:53
Привет! Вот еще темы с решениями:

Объясните пожалуйста как работают cin.good(), cin.sync(), cin.clear()
Такая проблема: сдаю в вуза лабораторные по программированию, писал все сам, до...

Цикл и cin
Здравствуйте. Уже сталкивался с подобной проблемой и никак не могу снова...

цикл while(cin)
когда цикл заканчивается, то cin &gt;&gt; j; не работает. почему? int main() { ...

Необходимо не допустить ввод символьных данных, используя механизм исключений
Добрый вечер. Во время выполнения программы возникает необходимость ввести...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru