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

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

Войти
Регистрация
Восстановить пароль
 
RareScrap
1 / 1 / 0
Регистрация: 14.10.2013
Сообщений: 85
#1

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

13.07.2014, 15:30. Просмотров 287. Ответов 8
Метки нет (Все метки)

Здравствуйте, простите за два идиотских вопроса, но почему С++ ведет себя именно так?

Почему программа уходит в рекурсию при вводе буквы?
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);
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.07.2014, 15:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему программа уходит в рекурсию при передачи в нее буквы (C++):

Почему при вводе числа программа работает нормально, а при вводе буквы уходит в бесконечный цикл? - C++
void mainmenu() { cout &lt;&lt; &quot;Введи число&quot; &lt;&lt; endl; cin &gt;&gt; choice; if (choice == 1) { cout &lt;&lt; &quot;Hello&quot; &lt;&lt; endl; } ...

Объяснить почему при заполнении матрицы программа уходит в бесконечный цикл - C++
#include &lt;iostream&gt; using namespace std; int main() { int mas; for (int i = 0; i &lt; 3;) { for (int j = 0; j &lt; 4;j++) ...

Объяснить почему программа уходит в бесконечный цикл (связные списки) - C++
Всем привет. Собрал связанный список, он работает, но при вводе типа char, программа уходит в бесконечный цикл. Без данного типа...

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

При передачи указателя на обьект ошибка,а при передаче ссылки на указатель нет. Почему? - C++
Hi All! class SomeObj { public: int x; }

Вычислить, используя рекурсию и без нее X - C++
Вычислить, используя рекурсию и без нее: С циклом я справился, а вот рекурсия пока что не даётся, но мысль всё равно есть. ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ValeryS
Модератор
6633 / 5040 / 466
Регистрация: 14.02.2011
Сообщений: 16,850
13.07.2014, 15:33 #2
Цитата Сообщение от RareScrap Посмотреть сообщение
Почему программа уходит в рекурсию при вводе буквы?
переведи
Цитата Сообщение от RareScrap Посмотреть сообщение
Почему при вводе буквы выводится ноль?
потому что так переопределен >>
все что ему не нравится, переводит в ошибку
0
rikimaru2013
13.07.2014, 15:37
  #3

Не по теме:

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

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

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

ты обидел программу
Какой я злодей
0
uglyPinokkio
326 / 229 / 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'); //Убираем невалидные символы из буфера 
        }
    }
}
0
RareScrap
1 / 1 / 0
Регистрация: 14.10.2013
Сообщений: 85
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'); //
^
Сборка завершилась с ошибкой.
0
uglyPinokkio
326 / 229 / 41
Регистрация: 30.05.2014
Сообщений: 682
13.07.2014, 16:00 #7
C++
1
#include <limits>
0
RareScrap
1 / 1 / 0
Регистрация: 14.10.2013
Сообщений: 85
13.07.2014, 16:15  [ТС] #8
Еще, а что значит "невалидное состояние"?
0
uglyPinokkio
326 / 229 / 41
Регистрация: 30.05.2014
Сообщений: 682
13.07.2014, 16:36 #9
Цитата Сообщение от RareScrap Посмотреть сообщение
Еще, а что значит "невалидное состояние"?
Данные в буфере, которые не могут быть приведены к требуемому типу.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.07.2014, 16:36
Привет! Вот еще темы с ответами:

Почему цикл на при 1 уходит в бесконечный цикл? - C++
#define _CRT_SECURE_NO_WARNINGS #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;string.h&gt; int main() { int x=0, y=0,...

Почему вылетает программа при 32768, а при 20 все работает нормально? - C++
Помогите исправить, почему программа вылетает при больших числах, а если поставить маленькие то все норм. то есть если 32768 заменить на...

Почему при использовании do while программа некомпелируеца? - C++
Здраствуйте, подскажите пожалуйсто почему когда я использую do или while программа компелируеца, а когда использую do while выходит ошибка...

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
13.07.2014, 16:36
Ответ Создать тему
Опции темы

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