2010-06-07 1 views
0

Я не уверен, что мне здесь не хватает. Это фрагмент кода, который я нашел на сайте, и я поместил его в свою программу, чтобы увидеть, как он работает, и затем я изменил бы его по своему вкусу позже. Я включаю iostream, и этот фрагмент кода находится в моей основной функции.Получение пользовательского ввода с использованием cin.get() в C++ вопросе

char buffer[80]; 
cout << "Enter the string: "; 
cin.get(buffer, 79);  // get up to 79 or newline 
cout << "Here's the buffer: " << buffer << endl; 

Что происходит, так это то, что программа никогда не запрашивает ввод пользователя. Кажется, это печатает два утверждения cout, а затем заканчивается. Место, где я получил фрагмент из показывает выход:

Enter the string: Hello World 
Here's the buffer: Hello World 
+1

Если это не будут 'соиЬ << "Введите строку:" << ENDL;'? –

+1

Почему? Это не должно иметь значения – segfault

+0

Это полностью зависит от вашего дизайна пользовательского интерфейса. Если вы хотите, чтобы строка была введена в той же строке, что и приглашение, то нет, это не должно. – Cogwheel

ответ

1

Мой совет должен был бы забыть о существовании этого фрагмента и посмотреть std::getline вместо этого. Вы бы использовать это что-то вроде этого:

#include <string> 
#include <iostream> 

int main() { 
    std::string buffer; 

    std::getline(buffer, std::cin); 
    std::cout << "Here's the buffer: " << buffer; 
    return 0; 
} 

Вы можете, конечно, использовать поток добычи, как std::cin >> buffer, но при этом будет читать только одно «слово» ввода, а не всю строку предыдущего кода пытался сделать.

1

Код возвращает все, что было во входном буфере в то время, скорее всего, ничего.

Чтобы проверить тип данных в файле, запустите программу и добавьте «< myfile», чтобы узнать, загружаются ли данные в ваш буфер.

Вам нужно сделать некоторые манипуляции с консолью, если вы хотите дождаться данных.

+0

Плюс 1 для того, чтобы на самом деле пытаться ответить на вопрос, а не сообщать ОП «не делай этого, сделай что-нибудь еще!» Вы на самом деле пытаетесь ответить на вопрос, который он задает, и это отличная ИМО, потому что это нечто иное, чем КАКИЕ-ЛИБО ДРУГОЙ ПОСТЕР. OP пытается принять AT MAXIMUM определенное количество символов, на которые нет ответа (как на этот комментарий), кроме вашего. –

+0

Спасибо Флорин. Основываясь на вашей должности, я думаю, что понял, что я хотел сделать. Все, что мне нужно было сделать, это добавить cin.get() перед строкой cin.get (buffer, 79); и это, кажется, отображает все. – Brundle

0

Чтобы получить новую строку как ограничивающий характер, вы должны использовать

cin.get(buffer, 79, '\n'); 
Смежные вопросы