Как выйти из программы, когда пользователь вводит специальный символ - PullRequest
1 голос
/ 01 мая 2011

В настоящее время я делаю простую программу, которая состоит из цикла while, который читает два целых числа, а затем распечатывает их. У меня вопрос, как я могу выйти из программы, когда пользователь вводит символ "|"? Вот эта маленькая супер простая программа:

int main()
{
    int var1 = 0;
    int var2 = 0;

    while(cin>>var1>>var2)
    {
        cout << var1 << " " << var2 << endl;
    }

    return 0;
}

Я знаю, что вы можете определить аргумент для getline, который делает именно то, что я хочу, но я не знаю, как реализовать это в цикле while. Спасибо за помощь.

Ответы [ 3 ]

3 голосов
/ 01 мая 2011

Ваш цикл уже завершится, как только кто-то введет что-то, что istream не может << в целое число. В любом случае, чтобы выйти конкретно в |, я бы использовал функцию peek следующим образом: </p>

int main()
{    
  int var1 = 0;    
  int var2 = 0;
  while( cin.good() )
  {
    char c;
    c = cin.peek();

    if( c == | )
      break;
    else
    {
      cin >> var1 >> var2;
      cout << var1 << " " << var2 << endl;
    }
  }

  return 0;
}

Избегает использования ввода в стиле c или разбора сложных строк.

0 голосов
/ 01 мая 2011

Как написано, вы выйдете из цикла, если пользователь введет |.Или что-либо еще, что нельзя интерпретировать как int (после пропуска начального пробела).

Если вы хотите более точный контроль, вам придется читать построчно (и анализировать строку), илипосимвольно (и накапливаем значения).

0 голосов
/ 01 мая 2011

Все, что вам нужно сделать, это проверить, было ли введенное значение |в блоке if, а затем используйте ключевое слово break, чтобы остановить цикл.

Что-то в строках вроде этого:

#include <stdio.h>
int main() {
    char c;
    for(;;) {
        printf( "\nPress any key, Q to quit: " );

        // Convert to character value
        scanf("%c", &c);
        if (c == 'Q')
            break;
    }
 } // Loop exits only when 'Q' is pressed
...