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

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

Восстановить пароль Регистрация
 
sssemil
3 / 3 / 1
Регистрация: 29.01.2013
Сообщений: 90
22.11.2013, 17:57     cin читает прежний ввод #1
Проблема такая, вот код. Когда я пишу /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() не читает 1 символ C++
C++ cin.getline() не читает строку
C++ Cin - ввод значения по умолчанию
C++ Почему не происходит ввод? (cin)
Корректный ввод с cin C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
17 / 17 / 2
Регистрация: 19.11.2013
Сообщений: 83
22.11.2013, 18:30     cin читает прежний ввод #3
cin.get() попробуй)
sssemil
3 / 3 / 1
Регистрация: 29.01.2013
Сообщений: 90
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
Сообщений: 90
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++
C++ ввод данных cin >>
Игнорирует ввод cin C++

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

Или воспользуйтесь поиском по форуму:
sssemil
3 / 3 / 1
Регистрация: 29.01.2013
Сообщений: 90
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 читает прежний ввод
Ответ Создать тему
Опции темы

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