2016-08-13 3 views
-2

У меня проблемы с программой cin.cin отсутствует первое слово строки

Моя проблема заключается в том, что первое слово всего, что я вводил, кажется пропущенным, возможно, из-за способа обработки буфера. Я видел похожие сообщения по этому поводу, но попытка применить их исправления к моему коду пока не удалась. Предполагается, что пользователь вводит имя, и это имя сохраняется в текстовом файле с другими введенными данными. Однако он всегда бросает первое слово.

#include "string" 
#include "stdafx.h" 

string _name;  

int main() 
{ 
    cout << "Choose a name" << endl; 

    getline(cin, _name); 
    cout << _name; 

    ofstream dat; 
    dat.open("data.txt"); 
    dat << _name; 
    dat.close(); 
     return 0; 
    } 

Этот код возникает, если проблема возникает. Я просто не могу заставить его взять первое слово.

+1

Пожалуйста разместить реальный код у вас есть проблемы с, а не выдуманным, фантазией код, который выиграл» т даже компилировать. –

+0

Не стоит беспокоиться, если на самом деле об этом уже был дан ответ, он будет отмечен как дубликат с правильным дублированием Q & A link – davedwards

+0

ладно спасибо. – cooperg2001

ответ

0
cin >> _name; 

Это первое слово в первой строке ввода вводится в _name.

getline(cin, _name); 

Это прочитает остальную часть строки в _name. Это перезаписывает существующее содержимое имени.

Поскольку это перезаписывает существующее содержимое _name, которое содержит первое прочитанное слово, это заканчивает чтение всех, кроме первого слова строки, как вы описали.

Если вы просто хотите прочитать всю строку до _name, вам нужно только удалить cin >> _name.

+0

Я попытался удалить cin >> _name, поэтому ничего не вводить. – cooperg2001

+0

Работает для меня. Определите «ничего не вводить». –

+0

Я имею в виду, что ни одно из того, что я печатаю, не читается в _name, но я только что исправил это, и он просто опустил первое слово, как раньше – cooperg2001

0

Если вы хотите, чтобы прочитать имя из CIN, то ваш код должен выглядеть следующим образом:

#include <iostream> 
#include <string> 
using namespace std; 

int main() 
{ 
    string _name; 
    cout << "Choose a name : "; 

    getline(cin, _name); 
    cout << _name << endl; 

    // Do something with _name - write to file etc.. 
    // .. 
} 
+0

Я думаю, что вы столкнулись с проблемой использования cin и getline() один за другим. cin >> оставляет символ новой строки в iostream, и если getline используется после cin >>, дополнительная строка новой строки вызывает пропущенное первое слово. Попробуйте добавить фиктивный getline() после cin и до реального getline(). – kgvinod

+0

Я постараюсь, но это странно. Я сделал копию в вашем коде, чтобы увидеть, будет ли это работать, и только после того, как он поместил ее в остальную часть моей программы, программа просто пропускает getline и возвращает 0. – cooperg2001

+0

cin/Проблема getline() также обсуждается здесь: http: //stackoverflow.com/questions/5739937/using-getlinecin-s-after-cin?rq = 1 – kgvinod

Смежные вопросы