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

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

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

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

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

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

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

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

Защита от дурака при вводе текста с помощью: cin.get cin.clear cin.sync - C++
Доброго времени суток. На С++ учусь с недавних пор. Имеется стандартная &quot;защита от дурака&quot; на ввод. Не пойму предназначение cin.get() !=...

Объясните пожалуйста как работают cin.good(), cin.sync(), cin.clear() - C++
Такая проблема: сдаю в вуза лабораторные по программированию, писал все сам, до этого c++ не изучал, поэтому возникали некоторые проблемы....

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
scenotaph
120 / 120 / 15
Регистрация: 29.03.2013
Сообщений: 237
22.11.2013, 18:05 #2
sssemil, если хотите читать в стринговскую переменную с пробелами, то getline(cin,str)
Либо, можете чистить cin:
C++
1
2
cin.clear();
cin.ignore(cin.rdbuf()->in_avail());
1
Liden
19 / 19 / 2
Регистрация: 19.11.2013
Сообщений: 83
22.11.2013, 18:30 #3
cin.get() попробуй)
0
sssemil
3 / 3 / 1
Регистрация: 29.01.2013
Сообщений: 91
22.11.2013, 19:23  [ТС] #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 минут
Но частично..теперь ток первое слово остаётся(
0
scenotaph
120 / 120 / 15
Регистрация: 29.03.2013
Сообщений: 237
22.11.2013, 19:28 #5
sssemil, то есть?
Если вы в стринговскую переменную считываете строку с пробелами, например "ya stroka", то с помощью cin >> str он считает только первое слово, до первого пробела, то бишь. а getline(cin,str) считает всё целиком.
1
sssemil
3 / 3 / 1
Регистрация: 29.01.2013
Сообщений: 91
22.11.2013, 19:32  [ТС] #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ой но полностью)
0
scenotaph
120 / 120 / 15
Регистрация: 29.03.2013
Сообщений: 237
22.11.2013, 19:36 #7
sssemil, Попробуйте cin.clear();
cin.ignore(cin.rdbuf()->in_avail()) поставить перед getline(cin,queADD); может у вас к тому времени син непустой тоже
1
sssemil
3 / 3 / 1
Регистрация: 29.01.2013
Сообщений: 91
22.11.2013, 19:38  [ТС] #8
Цитата Сообщение от scenotaph Посмотреть сообщение
sssemil, Попробуйте cin.clear();
cin.ignore(cin.rdbuf()->in_avail()) поставить перед getline(cin,queADD); может у вас к тому времени син непустой тоже
ДААА!!))Пасиб)И еще можете за одно и туда глянуть - Прочитать весь string после знака || )
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.11.2013, 19:38
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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