Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Дима_Кирсанов
5 / 5 / 0
Регистрация: 08.10.2010
Сообщений: 222
#1

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

21.11.2016, 11:56. Просмотров 152. Ответов 10
Метки нет (Все метки)

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 сразу после чтения первого символа строки?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.11.2016, 11:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Getchar() возвращает EOF сразу после чтения первого символа строки (C++):

Getchar и putchar EOF - C++
Подскажите что за символ такой EOF? Чисто догадываясь это 0, но не работает. #include &lt;stdio.h&gt; int main() { int c; while((c...

Рразделение строки на две части до первого вхождения заданного символа и после него - C++
Функция - Parse(s,t). Назначение - разделение строки s на две части: до первого вхождения символа t и после него. как можно сделать ее...

Написать программу разбиения строки на две части: до первого вхождения заданного символа и после него - C++
8.5.1. Помогите, пожалуйста, решить задачу в С++. Написать программу разбиения строки на две части: до первого вхождения...

Вывод всех символов строки, расположенных после первого символа ":" - C++
Есть задача: С клавиатуры вводится строка. Составить программу, которая выводит на экран все символы, расположенные после первого...

После вызова первого пункта меню функция не возвращает введенную строку - C++
Очень нужна помощь людей с мозгами и желательно еще пояснения. Программа после вызова первого пункта меню не принимает строку,что делать?...

После первого scanf выводятся сразу все оставшиеся printf и цикл прерывается - C++
Только начал изучать структуры и не могу сообразить почему у меня криво работает цикл. После первого scanf выводятся сразу все оставшиеся...

10
shilko2013
244 / 221 / 118
Регистрация: 02.04.2016
Сообщений: 855
Завершенные тесты: 1
21.11.2016, 12:26 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
while (Ch != EOF) правильно
1
afront
1023 / 969 / 367
Регистрация: 29.02.2016
Сообщений: 3,130
21.11.2016, 12:48 #3
C++
1
2
3
  char Ch;
  while((Ch = getchar()) != EOF)  
      putchar(Ch);
0
nmcf
5682 / 4993 / 1701
Регистрация: 14.04.2014
Сообщений: 20,369
21.11.2016, 13:20 #4
И так тоже не верно. Ch должен быть int.
0
Дима_Кирсанов
5 / 5 / 0
Регистрация: 08.10.2010
Сообщений: 222
21.11.2016, 13:44  [ТС] #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
0
nmcf
5682 / 4993 / 1701
Регистрация: 14.04.2014
Сообщений: 20,369
21.11.2016, 13:52 #6
Дима_Кирсанов, ты читаешь комментарии? Сказано же, что (!EOF) - это твои фантазии, и работать не будет.
0
Дима_Кирсанов
5 / 5 / 0
Регистрация: 08.10.2010
Сообщений: 222
21.11.2016, 13:57  [ТС] #7
Цитата Сообщение от nmcf Посмотреть сообщение
И так тоже не верно. Ch должен быть int.
Цитата Сообщение от nmcf Посмотреть сообщение
Дима_Кирсанов, ты читаешь комментарии? Сказано же, что (!EOF) - это твои фантазии, и работать не будет.
Тогда предложи свой вариант, пжл
0
zer0mail
2379 / 2010 / 200
Регистрация: 03.07.2012
Сообщений: 7,249
Записей в блоге: 1
21.11.2016, 14:01 #8
Дима_Кирсанов, хватит тупить. EOF - это константа (как 1, 2 и пр.) и ее значение не зависит от того, что прочитано из файла. С ней можно сравнивать, а ждать ее изменения бесполезно.
0
nmcf
5682 / 4993 / 1701
Регистрация: 14.04.2014
Сообщений: 20,369
21.11.2016, 14:08 #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;
    }
  }
 }
0
Дима_Кирсанов
5 / 5 / 0
Регистрация: 08.10.2010
Сообщений: 222
21.11.2016, 14:19  [ТС] #10
Цитата Сообщение от zer0mail Посмотреть сообщение
Дима_Кирсанов, хватит тупить. EOF - это константа (как 1, 2 и пр.) и ее значение не зависит от того, что прочитано из файла. С ней можно сравнивать, а ждать ее изменения бесполезно.
да ты прям капитан очевидность, наверное только ты до этого додумался(к этому времени)
0
zer0mail
2379 / 2010 / 200
Регистрация: 03.07.2012
Сообщений: 7,249
Записей в блоге: 1
21.11.2016, 15:27 #11
Да уж не спрашиваю, "как" в #7 сообщении, если ответ дали во #2. И разница между
C++
1
2
3
while((Ch = getchar()) != EOF)  
и 
if((Ch == ' ')&&(!EOF))
мне очевидна.
0
21.11.2016, 15:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.11.2016, 15:27
Привет! Вот еще темы с ответами:

Избавиться от всех пробелов до первого и после последнего символа в строке - C++
помогите, пожалуйста, написать главную main для этой функции и соответственно дописать 1ю строку void trimmed() { char* ps = s1; ...

Вывести коды первого и последнего символа строки - C++
7)Дана непустая строка. Вывести коды ее первого и последнего символа. 10)Во всех заданиях данного пункта предполагается, что исходные...

Почему после вывода, поле authorName выводиться без первого символа? - C++
Не могу понять причину и место, где это, собственно, происходит. #include &quot;stdafx.h&quot; // #include &quot;stdafx.h&quot;: // #include...

Удалить все элементы файла, расположенные после первого символа пробела - C++
Дан символьный файл, содержащий по крайней мере один символ пробела. Удалить все его элементы, расположенные после первого символа пробела,...


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

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

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