2016-02-29 3 views
-4

Я изучаю C++ сейчас, и сейчас я пытаюсь получить вход с помощью cin и getline. Однако getline каким-то образом игнорирует числа на входе. Я попытался разместить cin.clear() и cin.ignore(), но проблема не устранена. Я что-то делаю неправильно?getline cin игнорирует первый номер с ввода

Вот мой код:

string test; 
int main() 
{ 
    std::cout << "Please enter a date: "; 
    std::cin >> test; 
    std::getline(std::cin, test); 
    cout << test << endl; 
} 

Вот результат:

Please enter a date: 1 January 2015 
January 2015 
Press any key to continue . . . 
+0

Так почему же понижение без комментариев здесь? Вопрос ясен. Граммер достаточно хорош, (да, название может использовать небольшую помощь в капитализации.) Код явно написан как код. Для тех из нас, кто изучает C/C++, полезно видеть возможности для улучшения. Кажется, это не домашнее задание. Похоже, что в советах по вопросам, которые задают на StackOverflow. Итак, почему downvotes? Что мне не хватает? – zipzit

+3

@zipzit Простое использование отладчика или печать 'test' на консоли в промежутке между чтениями показало бы, в чем проблема. –

+0

Er, no. DsAjw сделал именно это. Он распечатал тест на консоль. Он не получил ожидаемых результатов. Это показало ему, что возникла проблема, но она не дистанционно обращается к ПОЧЕМУ, что проблема возникла. Я все еще сбитый с толку вниз. более 1/3 из тех, кто читает эту проблему, проголосовали за понижение этого вопроса. Я думал, это аргументировано и хорошо сказано. (но что я знаю, вздох ...) Он ясно спросил: «Я что-то делаю неправильно?» – zipzit

ответ

2

Просто не используйте std::cin, если вы не хотите что-то читать.

#include <iostream> 
#include <string> 
using std::string; 
using std::cout; 
using std::endl; 

int main() 
{ 
    string test; // Don't use global variable unless it is necessary. 
    std::cout << "Please enter a date: " << std::flush; 
    // std::cin >> test; // remove this harmful line 
    std::getline(std::cin, test); 
    cout << test << endl; 
    cout << "Press any key to continue . . ." << endl; 
    return 0; 
} 
0

getline не добавляет. Вы читаете строку до тех пор, пока она не ударит по пробелам, а затем перезапишет ее остальной частью строки.

std::cin >> test; //test == "1" 
std::getline(std::cin, test); //test == " January 2015" 
+0

Итак ... какой рекомендуемый код? Вы показали нам, что не так, но каков правильный способ сделать это? – zipzit

+0

@zipzit Я не знаю, что вы пытаетесь сделать. Почему вы читаете с помощью '>>', а затем 'getline'? Если вы просто используете 'getline', вы не будете удалять первый вход. –

+0

Я ничего не пытаюсь сделать. Я невинный наблюдатель. Я тоже улучшаю свои навыки, и я хотел бы знать, как это сделать ... Я думаю, что это ясно. Какой код необходим для получения полной пользовательской записи в 'cout << test << endl;' Oops. Я вижу, что @MikeCAT прямо ответил на мой вопрос. – zipzit

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