Форум программистов, компьютерный форум CyberForum.ru

Getchar() возвращает EOF сразу после чтения первого символа строки - C++

Восстановить пароль Регистрация
 
Дима_Кирсанов
5 / 5 / 0
Регистрация: 08.10.2010
Сообщений: 217
21.11.2016, 11:56     Getchar() возвращает EOF сразу после чтения первого символа строки #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <fstream>
#include <iostream>
#include <cstdlib>
#include <vector>
#include <conio.h>
using namespace std;
using std::cin;
using std::cout;
using std::endl;
 
int main()
{
  char Ch;
  do
  {
    Ch = getchar(); 
    cout << "Ch == " << Ch << endl;
  }
  while(!EOF);
}
Почему при чтении с командной строки getchar() возвращает EOF сразу после чтения первого символа строки?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.11.2016, 11:56     Getchar() возвращает EOF сразу после чтения первого символа строки
Посмотрите здесь:

Удалить все элементы файла, расположенные после первого символа пробела C++
C++ Getchar и putchar EOF
C++ Вывод всех символов строки, расположенных после первого символа ":"
C++ Написать программу разбиения строки на две части: до первого вхождения заданного символа и после него
После первого scanf выводятся сразу все оставшиеся printf и цикл прерывается C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
shilko2013
 Аватар для shilko2013
237 / 214 / 115
Регистрация: 02.04.2016
Сообщений: 812
Завершенные тесты: 1
21.11.2016, 12:26     Getchar() возвращает EOF сразу после чтения первого символа строки #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
while (Ch != EOF) правильно
afront
675 / 637 / 228
Регистрация: 29.02.2016
Сообщений: 2,067
21.11.2016, 12:48     Getchar() возвращает EOF сразу после чтения первого символа строки #3
C++
1
2
3
  char Ch;
  while((Ch = getchar()) != EOF)  
      putchar(Ch);
nmcf
4265 / 3696 / 1243
Регистрация: 14.04.2014
Сообщений: 14,478
21.11.2016, 13:20     Getchar() возвращает EOF сразу после чтения первого символа строки #4
И так тоже не верно. Ch должен быть int.
Дима_Кирсанов
5 / 5 / 0
Регистрация: 08.10.2010
Сообщений: 217
21.11.2016, 13:44  [ТС]     Getchar() возвращает EOF сразу после чтения первого символа строки #5
Спасибо. А как обнаружить конец строки?

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
#include <fstream>
#include <iostream>
#include <cstdlib>
#include <vector>
#include <conio.h>
using namespace std;
using std::cin;
using std::cout;
using std::endl;
 
int main()
{
  enum ReadingStates{IsErr, NoErr};
  char Ch;
  ReadingStates ReadingState = NoErr;
  while((Ch = getchar()) != EOF)
  {
    cout << "Ch == " << Ch << endl;
    if((Ch == ' ')&&(!EOF))
    {
      ReadingState = IsErr;      
      cout << "ReadingState == IsErr" << endl;
    }
  }
 }
Условие
C++
1
2
3
4
5
if((Ch == ' ')&&(!EOF))
{
  ReadingState = IsErr;      
  cout << "ReadingState == IsErr" << endl;
}
не работает при вводе 1 23
nmcf
4265 / 3696 / 1243
Регистрация: 14.04.2014
Сообщений: 14,478
21.11.2016, 13:52     Getchar() возвращает EOF сразу после чтения первого символа строки #6
Дима_Кирсанов, ты читаешь комментарии? Сказано же, что (!EOF) - это твои фантазии, и работать не будет.
Дима_Кирсанов
5 / 5 / 0
Регистрация: 08.10.2010
Сообщений: 217
21.11.2016, 13:57  [ТС]     Getchar() возвращает EOF сразу после чтения первого символа строки #7
Цитата Сообщение от nmcf Посмотреть сообщение
И так тоже не верно. Ch должен быть int.
Цитата Сообщение от nmcf Посмотреть сообщение
Дима_Кирсанов, ты читаешь комментарии? Сказано же, что (!EOF) - это твои фантазии, и работать не будет.
Тогда предложи свой вариант, пжл
zer0mail
2177 / 1860 / 187
Регистрация: 03.07.2012
Сообщений: 6,621
Записей в блоге: 1
21.11.2016, 14:01     Getchar() возвращает EOF сразу после чтения первого символа строки #8
Дима_Кирсанов, хватит тупить. EOF - это константа (как 1, 2 и пр.) и ее значение не зависит от того, что прочитано из файла. С ней можно сравнивать, а ждать ее изменения бесполезно.
nmcf
4265 / 3696 / 1243
Регистрация: 14.04.2014
Сообщений: 14,478
21.11.2016, 14:08     Getchar() возвращает EOF сразу после чтения первого символа строки #9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main()
{
  enum ReadingStates{IsErr, NoErr};
  int Ch;
  ReadingStates ReadingState = NoErr;
  while((Ch = cin.get()) != EOF)
  {
    cout << "Ch == " << static_cast<char>(Ch) << endl;
    if(Ch == ' ')
    {
      ReadingState = IsErr;      
      cout << "ReadingState == IsErr" << endl;
    }
  }
 }
Дима_Кирсанов
5 / 5 / 0
Регистрация: 08.10.2010
Сообщений: 217
21.11.2016, 14:19  [ТС]     Getchar() возвращает EOF сразу после чтения первого символа строки #10
Цитата Сообщение от zer0mail Посмотреть сообщение
Дима_Кирсанов, хватит тупить. EOF - это константа (как 1, 2 и пр.) и ее значение не зависит от того, что прочитано из файла. С ней можно сравнивать, а ждать ее изменения бесполезно.
да ты прям капитан очевидность, наверное только ты до этого додумался(к этому времени)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.11.2016, 15:27     Getchar() возвращает EOF сразу после чтения первого символа строки
Еще ссылки по теме:

Почему после вывода, поле authorName выводиться без первого символа? C++
Рразделение строки на две части до первого вхождения заданного символа и после него C++
Дублирование последнего символа while ( !file.eof() ) C++

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

Или воспользуйтесь поиском по форуму:
zer0mail
2177 / 1860 / 187
Регистрация: 03.07.2012
Сообщений: 6,621
Записей в блоге: 1
21.11.2016, 15:27     Getchar() возвращает EOF сразу после чтения первого символа строки #11
Да уж не спрашиваю, "как" в #7 сообщении, если ответ дали во #2. И разница между
C++
1
2
3
while((Ch = getchar()) != EOF)  
и 
if((Ch == ' ')&&(!EOF))
мне очевидна.
Yandex
Объявления
21.11.2016, 15:27     Getchar() возвращает EOF сразу после чтения первого символа строки
Ответ Создать тему
Опции темы

Текущее время: 10:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru