2013-09-05 2 views
-2

Я пишу программу на C++, и мне нужно запрограммировать ее на завершение/завершение после того, как пользователь попадет в enter. Это то, что у меня есть:C++ Нажмите Enter, чтобы завершить программу

cout << "Press Enter to End" << endl; 

cin.ignore(); //ends after the user hits enter 

return 0; 

Но это не работает. Любой совет?

+0

Можете ли вы опубликовать более полный пример? У вас есть «возврат», который может помочь, но мы не можем сказать, что он возвращает * из *. –

+0

Что такое "не работает"? – GManNickG

+0

Что значит «это не работает»? Пожалуйста, объясни. – 0x499602D2

ответ

2

Я чувствую, что вы были некоторыми отформатирован вводом ранее в вашей программе, то есть, это выглядит примерно так:

std::cin >> value; 
do_something(value); 
std::cout << "press enter to end\n"; 
std::cin.ignore(); 

Если это так, то у вас есть какой-то символ в буфере ввода с того времени, введено value. Например, может быть '\n', но это могут быть и другие нечетные другие символы. Этот символ будет читаться, когда программа встречает std::cin.ignore().

Что вы, , вероятно, хотите, чтобы избавиться от символов, известных в настоящее время в буфере. Это не совсем то, что было бы сделано, поскольку это может все еще пропускать символы, которые уже введены, но еще не перенесены, но нет переносного подхода для очистки всех потенциальных символов (обычно это не проблема, потому что вряд ли какой-либо пользовательский интерфейс зависит от символьный ввод с терминала).

Чтобы игнорировать символы, которые, как известно, присутствует вам нужно начать с разрыва соединения между <stdio.h> и IOStreams использованием std::ios_base::sync_with_stdio(), а затем потреблять известные символы, введенные после последнего чтения, например,

#include <iostream> 

int main() 
{ 
    std::ios_base::sync_with_stdio(false); 
    int x; 
    std::cin >> x; 
    std::cin.ignore(std::cin.rdbuf()->in_avail()); 
    std::cout << "press enter\n"; 
    std::cin.ignore(); 
} 

Нечетный вызов sync_with_stdio() необходим для того, чтобы IOStreams фактически буферизуют символы, полученные от системы, а не читают символы индивидуально. В качестве хорошего побочного эффекта это резко улучшает производительность при использовании std:cin, std::cout и других стандартных объектов потока.

-1

возможно добавить систему («пауза») в конце кода; (сначала включите). Я думаю, вы хотите войти, чтобы закрыть завершение.

+4

Любой вызов 'system()' - плохая идея для чего-то подобного. – jdphenix

+0

@jdphenix Кажется, это стандартный тариф для одного из курсов, который люди приходят сюда, чтобы получить ответы, что печально - поскольку это означает, что их учат неправильно использовать визуальную студию. – kfsone

+0

@jdphenix жаль, что я даю этот ответ, потому что я обычно использую это в консоли Windows, не могли бы вы объяснить, почему, спасибо большое – linpingta

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