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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.71
ВиталийZ
0 / 0 / 0
Регистрация: 25.12.2008
Сообщений: 12
#1

Почему не выполняется один из операторов ввода,помеченые * - C++

25.12.2008, 12:31. Просмотров 2045. Ответов 11
Метки нет (Все метки)

Один из операторов ввода при повторной работе практически всегда пропускается
Код
#include <stdio.h>
#include <iostream>
 
using namespace std;
 
void main ()
{ 
int i=2,k;
    char s[300],s1;
    i=2; k=2;
    while(i>0)
    {
        cout<<" Input data(1 or other) "<<endl; 
        cin>>k;
    switch(k)
    {
        case 1 :    
        {
            i=2;
            cout<<"Input data"<<endl;
            gets(s); //*
            //cin.getline(s,200,'\n'); // или этот
            cout<<s<<endl;
            cout<<"Continue ?(y,n)"<<endl;
            cin>>s1; //*
            if(s1 !='y') 
                i=-2;
        };
        break;
        default:
        i=-2;
    }
}         
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.12.2008, 12:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему не выполняется один из операторов ввода,помеченые * (C++):

Перегрузка операторов ввода\вывода - C++
Вот такой простенький пример описан во многих постах, есть в некоторых видео но у меня в компиляторе mvs 2015, при компиляции выдает...

Перегрузка операторов ввода вывода - C++
ребята болит уже голова)) main.cpp #include &quot;myStr.h&quot; int main() { myStr myS(&quot;ok&quot;); cout&lt;&lt;myS&lt;&lt;endl;//надо чтоб...

Перегрузка операторов ввода и вывода - C++
Добрый вечер! Помогите с задачкой.Я создал класс очередь и класс массив очередей.задача готова, но препод потребовал перегрузить оператор...

Перегрузка операторов ввода и вывода - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; class ComplexNumber { private: double a, b; ...

Перегрузка операторов ввода/вывода. - C++
Класс комплексных чисел. Нужно чтобы программа выводила и вводила в таком виде (функции in и out): #include &lt;iostream&gt; #include...

Перегрузка операторов ввода/вывода - C++
Вроде сделал, но не работает перегрузка оператора ввода. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; ...

11
Spo1ler
292 / 52 / 3
Регистрация: 22.05.2008
Сообщений: 788
25.12.2008, 15:52 #2
Потому, что /* открывает мульти-строчный комментарий. RTFM.
0
ВиталийZ
0 / 0 / 0
Регистрация: 25.12.2008
Сообщений: 12
26.12.2008, 11:39  [ТС] #3
Не понял! Убираем оба комментария //*,а один из операторов ввода даже если использовать аналогичные операторы ввода всеравно не выполняется. Почему?
Приходится только дублировать операторы ввода.
0
Spo1ler
292 / 52 / 3
Регистрация: 22.05.2008
Сообщений: 788
26.12.2008, 12:10 #4
Иногда в буффере ввода могут остаться символы. И когда следующая ф-ция, которая "забирает" из потока символ выполняется, она даже не требует пользователя ввести что-то, а просто берет те символы, которые остались от предыдущего ввода.
0
ВиталийZ
0 / 0 / 0
Регистрация: 25.12.2008
Сообщений: 12
28.12.2008, 22:07  [ТС] #5
И как же поступить? Перед очередным вводом очистить буфер? Напомните как правильно записать очистку буфера.
0
CheshireCat
Эксперт С++
2896 / 1245 / 78
Регистрация: 27.05.2008
Сообщений: 3,411
28.12.2008, 23:07 #6
Код
cin.flush();
1
ВиталийZ
0 / 0 / 0
Регистрация: 25.12.2008
Сообщений: 12
31.12.2008, 11:27  [ТС] #7
Такой команды cin.flush() нет(уменя пишет, что это не базовая команда istream), а cin.clear() не помогает.
0
Spo1ler
292 / 52 / 3
Регистрация: 22.05.2008
Сообщений: 788
01.01.2009, 16:07 #8
Сделай cin.get()
0
ВиталийZ
0 / 0 / 0
Регистрация: 25.12.2008
Сообщений: 12
07.01.2009, 15:02  [ТС] #9
Использование cin.get() не выход из положения. Как же всетаки правильно организовать ввод строки без пропуска операторов ввода даже если пользователь введет больше символов, чем это предусмотрено форматом ввода?

Уважаемые! Так кто-нибудь знает как правильно записать операторы ввода? Или точнее как удалить из буфера ввода лишние символы, чтобы они потом не мешали при последующем вводе. Повторю cin.clear() не помогает.
0
XaosLord
3 / 3 / 1
Регистрация: 18.03.2009
Сообщений: 20
07.04.2009, 14:05 #10
После считывания строки дописать:

C++
1
2
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(),'\n'); //сбрасываем весь хлам пока не кончится поток или не встретится символ перехода на новую строку.
подключить <limits>
2
Monte-Cristo
2793 / 1379 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
07.04.2009, 14:15 #11
cin.ignore(); у меня работает на 100%
0
ВиталийZ
0 / 0 / 0
Регистрация: 25.12.2008
Сообщений: 12
03.05.2009, 11:12  [ТС] #12
Спасибо за профессиональную подсказку
0
03.05.2009, 11:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.05.2009, 11:12
Привет! Вот еще темы с ответами:

Перегрузка операторов ввода-вывода - C++
Доброго времени суток! Почему перестал работать &gt;&gt; оператор для стандартного типа char. Перегруженная операция cin&gt;&gt;one возвращает все...

Перегрузка операторов ввода вывода - C++
в .h файле сделал объявление inline ostream&amp; operator &lt;&lt;(ostream&amp;, const Proc&amp;); inline istream&amp; operator &gt;&gt;(istream&amp;, Proc&amp;); в...

Перегрузка операторов ввода. Segmentation fault - C++
Не могу разобраться с ошибкой. Вроде написал все логично: #include &lt;iostream&gt; using namespace std; class Card { char...

Перегрузка операторов присваивания, ввода, вывода - C++
Приветствую, помогите реализовать перегрузку операторов(в частности операторы присваивания, ввода, вывода) для данной программы. Я не могу...


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

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

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