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

Почему программа уходит в рекурсию при передачи в нее буквы - C++

Восстановить пароль Регистрация
 
RareScrap
0 / 0 / 0
Регистрация: 14.10.2013
Сообщений: 84
13.07.2014, 15:30     Почему программа уходит в рекурсию при передачи в нее буквы #1
Здравствуйте, простите за два идиотских вопроса, но почему С++ ведет себя именно так?

Почему программа уходит в рекурсию при вводе буквы?
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;
 
int main()
{
    int a;
    for(;;)
    {
        cin >> a;
        cout << a;
    }
}
Насколько я знаю, 0 - ложь, а любое другое значение - истина. Почему при вводе буквы выводится ноль?
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
using namespace std;
 
int main()
{
    int a;
    cin >> a;
    cout << bool(a);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.07.2014, 15:30     Почему программа уходит в рекурсию при передачи в нее буквы
Посмотрите здесь:

Почему при инициализации данных программа работает быстрей? C++
C++ Почему при использовании do while программа некомпелируеца?
Почему не работает программа при некоторых входных данных C++
При передачи указателя на обьект ошибка,а при передаче ссылки на указатель нет. Почему? C++
C++ Почему цикл на при 1 уходит в бесконечный цикл?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
13.07.2014, 15:33     Почему программа уходит в рекурсию при передачи в нее буквы #2
Цитата Сообщение от RareScrap Посмотреть сообщение
Почему программа уходит в рекурсию при вводе буквы?
переведи
Цитата Сообщение от RareScrap Посмотреть сообщение
Почему при вводе буквы выводится ноль?
потому что так переопределен >>
все что ему не нравится, переводит в ошибку
rikimaru2013
13.07.2014, 15:37
  #3

Не по теме:

ты обидел программу

RareScrap
0 / 0 / 0
Регистрация: 14.10.2013
Сообщений: 84
13.07.2014, 15:40  [ТС]     Почему программа уходит в рекурсию при передачи в нее буквы #4
Почему, когда вводишь в программу букву, выводится бесчисленное множество нулей. Разве программа не должна просить ввести новое значение после каждой итерации цикла?

Добавлено через 1 минуту
Не по теме:

ты обидел программу
Какой я злодей
uglyPinokkio
325 / 228 / 41
Регистрация: 30.05.2014
Сообщений: 682
13.07.2014, 15:52     Почему программа уходит в рекурсию при передачи в нее буквы #5
Цитата Сообщение от RareScrap Посмотреть сообщение
Почему, когда вводишь в программу букву, выводится бесчисленное множество нулей. Разве программа не должна просить ввести новое значение после каждой итерации цикла?
Потому что ввод буквы переводит поток ввода в невалидное состояние.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
 
int main()
{
    int a;
    for(;;)
    {
        cin >> a;
        if(cin.good())
        {
           cout << a;
        }
        else
        {
           cin.clear(); //Сбрасываем флаг ошибки
           cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); //Убираем невалидные символы из буфера 
        }
    }
}
RareScrap
0 / 0 / 0
Регистрация: 14.10.2013
Сообщений: 84
13.07.2014, 15:55  [ТС]     Почему программа уходит в рекурсию при передачи в нее буквы #6
Не копмилируется. Выдает

"g++ -Wall -c "test.cpp" (в каталоге: C:\Users\Юрий\Documents\C++\Задачи)
test.cpp: In function 'int main()':
test.cpp:18:23: error: 'numeric_limits' is not a member of 'std'
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); //
^
test.cpp:18:58: error: expected primary-expression before '>' token
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); //
^
test.cpp:18:65: error: no matching function for call to 'max()'
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); //
^
test.cpp:18:65: note: candidates are:
In file included from c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\char_traits.h:39:0,
from c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\ios:40,
from c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\ostream:38,
from c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\iostream:39,
from test.cpp:1:
c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\stl_algobase.h:216:5: note: template<class _Tp> const _Tp& std::max(const _Tp&, const _Tp&)
max(const _Tp& __a, const _Tp& __b)
^
c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\stl_algobase.h:216:5: note: template argument deduction/substitution failed:
test.cpp:18:65: note: candidate expects 2 arguments, 0 provided
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); //
^
In file included from c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\char_traits.h:39:0,
from c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\ios:40,
from c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\ostream:38,
from c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\iostream:39,
from test.cpp:1:
c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\stl_algobase.h:260:5: note: template<class _Tp, class _Compare> const _Tp& std::max(const _Tp&, const _Tp&, _Compare)
max(const _Tp& __a, const _Tp& __b, _Compare __comp)
^
c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\stl_algobase.h:260:5: note: template argument deduction/substitution failed:
test.cpp:18:65: note: candidate expects 3 arguments, 0 provided
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); //
^
Сборка завершилась с ошибкой.
uglyPinokkio
325 / 228 / 41
Регистрация: 30.05.2014
Сообщений: 682
13.07.2014, 16:00     Почему программа уходит в рекурсию при передачи в нее буквы #7
C++
1
#include <limits>
RareScrap
0 / 0 / 0
Регистрация: 14.10.2013
Сообщений: 84
13.07.2014, 16:15  [ТС]     Почему программа уходит в рекурсию при передачи в нее буквы #8
Еще, а что значит "невалидное состояние"?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.07.2014, 16:36     Почему программа уходит в рекурсию при передачи в нее буквы
Еще ссылки по теме:

C++ Вычислить, используя рекурсию и без нее X
Метод Ньютона - программа уходит в бесконечный цикл C++
C++ Программа под AVR уходит в RUNTIME

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

Или воспользуйтесь поиском по форуму:
uglyPinokkio
325 / 228 / 41
Регистрация: 30.05.2014
Сообщений: 682
13.07.2014, 16:36     Почему программа уходит в рекурсию при передачи в нее буквы #9
Цитата Сообщение от RareScrap Посмотреть сообщение
Еще, а что значит "невалидное состояние"?
Данные в буфере, которые не могут быть приведены к требуемому типу.
Yandex
Объявления
13.07.2014, 16:36     Почему программа уходит в рекурсию при передачи в нее буквы
Ответ Создать тему
Опции темы

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