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

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

Войти
Регистрация
Восстановить пароль
 
sssemil
3 / 3 / 1
Регистрация: 29.01.2013
Сообщений: 91
#1

cin читает прежний ввод - C++

22.11.2013, 17:57. Просмотров 365. Ответов 7
Метки нет (Все метки)

Проблема такая, вот код. Когда я пишу /add все сначала норм, спрашивает cin>> queADD;, но когда доходит до cin>> ansADD;, то он второе слова до этого написанноя для cin>> queADD; берет себе..как лечить?)
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
#include <fstream>
#include <string.h>
#include <string>
 
using namespace std;
    
 
string load(string path, string word) {
    ifstream file;  
    string str, ans, line;   
    file.open (path);  
    while (getline(file, str)) 
    {   
        if (str.find(word) != std::string::npos) {
            return str;
        }
    }
    return "I don`t know :(";
}
 
int main()  
{       
    string path = "words.ini";
    string que, queADD, ansADD;
    while(true)
    {                   
        cout<<"Ask your question :";
        cin>>que;
        if(que == "/add")
        {
            cout<<"Type question:"<<endl;
            cin>> queADD;
            cout<<endl;
            cout<<"Type answer:"<<endl;
            cin>>ansADD;
            ofstream file; 
            file.open(path);
            file<<endl<<queADD<<"||"<<ansADD;
            cout<<"Done!"<<endl;
            cout<<"Ask your question :";
        }
        else
        {       
            cout<<load(path, que)<<endl;    
        }
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.11.2013, 17:57     cin читает прежний ввод
Посмотрите здесь:

cin.getline() не читает строку - C++
Добрый день. Нужно последовательно ввести 2 строки через cin.getline(), но после ввода первой, если она превышает допустимый размер, ввод...

cin.getline() не читает 1 символ - C++
Доброго времени суток :) пишу довольно простой код, но тут появилась проблема. Вот обрезаний кусок кода который не хочет работать...

Как читает поток ввода cin ? - C++
Спасибо большое, разобрался. Возникли новые вопросы: 1) как читает поток ввода оператор cin ? Например: char a,b; ...

Ввод cin - C++
Я тут раньше задавал подобный вопрос, то тема умерла, по ходу. Здесь приведен листинг функции ввода калькулятора из книги Страуструпа. ...

Ввод с cin с пробелами - C++
Здравствуйте! Делаю стандартное задание по структурам. Пока сделано только добавление и показ всего. Но вот проблемка. Если название...

Игнорирует ввод cin - C++
Не могу понять почему не считывает переменную 'q' в 13 строке. Программа просто обходит её стороной. #include &lt;iostream&gt; #include...

ввод данных cin >> - C++
Приветствую! #include &lt;iostream&gt; using namespace std; int main() {setlocale (LC_ALL,&quot;&quot;); int qt; float...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
scenotaph
120 / 120 / 15
Регистрация: 29.03.2013
Сообщений: 237
22.11.2013, 18:05     cin читает прежний ввод #2
sssemil, если хотите читать в стринговскую переменную с пробелами, то getline(cin,str)
Либо, можете чистить cin:
C++
1
2
cin.clear();
cin.ignore(cin.rdbuf()->in_avail());
Liden
19 / 19 / 2
Регистрация: 19.11.2013
Сообщений: 83
22.11.2013, 18:30     cin читает прежний ввод #3
cin.get() попробуй)
sssemil
3 / 3 / 1
Регистрация: 29.01.2013
Сообщений: 91
22.11.2013, 19:23  [ТС]     cin читает прежний ввод #4
Цитата Сообщение от scenotaph Посмотреть сообщение
sssemil, если хотите читать в стринговскую переменную с пробелами, то getline(cin,str)
Либо, можете чистить cin:
C++
1
2
cin.clear();
cin.ignore(cin.rdbuf()->in_avail());
Сработало
cin.clear();
cin.ignore(cin.rdbuf()->in_avail());

Добавлено через 14 минут
Но частично..теперь ток первое слово остаётся(
scenotaph
120 / 120 / 15
Регистрация: 29.03.2013
Сообщений: 237
22.11.2013, 19:28     cin читает прежний ввод #5
sssemil, то есть?
Если вы в стринговскую переменную считываете строку с пробелами, например "ya stroka", то с помощью cin >> str он считает только первое слово, до первого пробела, то бишь. а getline(cin,str) считает всё целиком.
sssemil
3 / 3 / 1
Регистрация: 29.01.2013
Сообщений: 91
22.11.2013, 19:32  [ТС]     cin читает прежний ввод #6
Цитата Сообщение от scenotaph Посмотреть сообщение
sssemil, то есть?
Если вы в стринговскую переменную считываете строку с пробелами, например "ya stroka", то с помощью cin >> str он считает только первое слово, до первого пробела, то бишь. а getline(cin,str) считает всё целиком.
Сделал так
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
bool add(string queADD, string ansADD, string path, bool queB) {    
    if(queB == true)
    {   
        cout<<"Type question:"<<endl;
        getline(cin,queADD);
        //cin>>queADD;
    }
    cin.clear();
    cin.ignore(cin.rdbuf()->in_avail());
    cout<<endl;
    cout<<"Type answer:"<<endl;
    //cin>>ansADD;
    getline(cin,ansADD);
    try {   
        ofstream file;     
        file.open(path);    
        file<<endl<<queADD<<"||"<<ansADD;
        return true;
    }
    catch(...) {
        return false;
    }   
}
Теперь если пишу /add, то он пропускает первый queADD и ток 2ой но полностью)
scenotaph
120 / 120 / 15
Регистрация: 29.03.2013
Сообщений: 237
22.11.2013, 19:36     cin читает прежний ввод #7
sssemil, Попробуйте cin.clear();
cin.ignore(cin.rdbuf()->in_avail()) поставить перед getline(cin,queADD); может у вас к тому времени син непустой тоже
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.11.2013, 19:38     cin читает прежний ввод
Еще ссылки по теме:

Ввод текста по cin - C++
Доброго времени суток. имею следующий код: OpenAsper oAsper; cin&gt;&gt;pathS; path = new char ; strcpy( path, pathS.c_str() ); ...

Корректный ввод с cin - C++
Пусть в программе есть оператор cin &gt;&gt; n, где n типа int, а пользователь вводит набор символов Как отследить это, не выдавая ошибку, и не...

Почему не происходит ввод? (cin) - C++
Здравствуйте. Скажите, пожалуйста, почему нету приглашения ввести переменную s? int main() { cout&lt;&lt;&quot;Enter digits, for exit...

Ввод только чисел в cin>>value - C++
Доброго времени суток! Написал программу, которая считывает и выводит элементы массива... Всё просто, но на самом деле, мне бы чуть...

Cin - ввод значения по умолчанию - C++
Доброго дня всем. Возник вопрос... При вводе текста, к примеру: cin &gt;&gt; ; когда нажимаем на стрелки можно выводить значения, который...


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

Или воспользуйтесь поиском по форуму:
sssemil
3 / 3 / 1
Регистрация: 29.01.2013
Сообщений: 91
22.11.2013, 19:38  [ТС]     cin читает прежний ввод #8
Цитата Сообщение от scenotaph Посмотреть сообщение
sssemil, Попробуйте cin.clear();
cin.ignore(cin.rdbuf()->in_avail()) поставить перед getline(cin,queADD); может у вас к тому времени син непустой тоже
ДААА!!))Пасиб)И еще можете за одно и туда глянуть - Прочитать весь string после знака || )
Yandex
Объявления
22.11.2013, 19:38     cin читает прежний ввод
Ответ Создать тему
Опции темы

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