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

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

25.12.2008, 12:31. Просмотров 2057. Ответов 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++):

Добрые люди, скажите пожалуйста как выполняется перегрузка операторов
Помогите((( Я не понимаю, как нужно сделать перегрузку операторов * для...

Перегрузка операторов ввода\вывода
Вот такой простенький пример описан во многих постах, есть в некоторых видео...

Перегрузка операторов ввода/вывода.
Класс комплексных чисел. Нужно чтобы программа выводила и вводила в таком виде...

Перегрузка операторов ввода-вывода
Доброго времени суток! Почему перестал работать &gt;&gt; оператор для стандартного...

Перегрузка операторов ввода/вывода
Вроде сделал, но не работает перегрузка оператора ввода. #include &quot;stdafx.h&quot;...

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

11
Spo1ler
293 / 53 / 5
Регистрация: 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
293 / 53 / 5
Регистрация: 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
Эксперт С++
2907 / 1256 / 114
Регистрация: 27.05.2008
Сообщений: 3,451
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
293 / 53 / 5
Регистрация: 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
2794 / 1380 / 107
Регистрация: 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
Привет! Вот еще темы с решениями:

Перегрузка операторов ввода вывода
ребята болит уже голова)) main.cpp #include &quot;myStr.h&quot; int main() { ...

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

Перегрузка операторов ввода и вывода
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; class...

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


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

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

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