2009-11-21 2 views
0

Я новичок в C++, и у меня есть путаница в отношении этой программы. Я запускаю это в Visual Studio 2008 в качестве консольного приложения win32.Основной вопрос в C++

#include <iomanip> 
    #include <cmath> 
    #include <string> 
    using namespace std; 
    #define PI 3.14 
    int l=1; 
    int x; 
    void main() 
    { 
     do 
     { 
      cout << "choose 1"; 
      cout << "choose 2"; 
      cin >> x; 
      switch(x) 
      { 
       case 1: 
        cout << "action 1"; 
        break; 
       case 2: 
        cout << "action 2"; 
        break; 
       default: 
        cout << "unknown command"; 
        break; 
      } 
     } while (l=1) 
    } 

Когда я запускаю эту программу и набираю что-либо еще, кроме 1 или 2, она не отображает параметр по умолчанию в коммутаторе. Я не могу понять проблему. Как исправить эту проблему?

+0

это работает на 1 и 2? –

+0

inlcude? тогда как (1 = 1)? Обе эти ошибки даже не компилируются. Вы перепечатывали источник? Почему бы не скопировать/вставить его из вашей среды IDE? – Toad

+0

да это действительно работает – 2009-11-21 14:30:32

ответ

2

Это лучшая первая попытка, которая выполняет все три случая в зависимости от ввода. Исходная версия, которую вы дали, даже не скомпилировалась из-за различных ошибок.

Я предлагаю вам начать с этого:

#include <iostream> 
#include <iomanip> 
#include <cmath> 
#include <string> 
using namespace std; 
int main() 
{ 
    int x; 
    do 
    { 
     cout<<"choose 1 or 2: "; 
     cin>>x; 
     switch(x) 
     { 
      case 1: 
       cout<<"action 1"<<endl; 
       break; 
      case 2: 
       cout<<"action 2"<<endl; 
       break; 
      default: 
       cout<<"unknown command"<<endl; 
       break; 
     } 
    } while(1==1); 
    return 0; 
} 

Вот пример работы:

choose 1 or 2: 1 
action 1 
choose 1 or 2: 2 
action 2 
choose 1 or 2: 3 
unknown command 
choose 1 or 2: ^C 

Есть еще проблемы даже с фиксированным кодом, например, при вводе нечисловое. Вы действительно должны получать строки со стандартного ввода и проверять их на достоверность перед преобразованием в число.

Для обработки не-числовых, то это будет хорошее начало:

#include <iostream> 
#include <iomanip> 
#include <cmath> 
#include <string> 
using namespace std; 
int main() 
{ 
    string x; 
    do 
    { 
     cout<<"choose 1 or 2: "; 
     cin>>x; 
     if (!isdigit(x[0])) { 
      cout<<"non-numeric command"<<endl; 
     } else { 
      switch(x[0]) 
      { 
       case '1': 
        cout<<"action 1"<<endl; 
        break; 
       case '2': 
        cout<<"action 2"<<endl; 
        break; 
       default: 
        cout<<"unknown command"<<endl; 
        break; 
      } 
     } 
    } while(1==1); 
    return 0; 
} 
0

Это работает - только для междунаров (если вы печатаете символ .. это будет запутаться)

#include <iomanip> 
#include <cmath> 
#include <string> 
#include <iostream> 
using namespace std; 
#define PI 3.14 int l=1; void main() { int x; 
    do 
    { 
     cout<<"choose 1"; 
     cout<<"choose 2"; 
     cin>>x; 
     switch(x) 
     { 
      case 1: 
       cout<<"action 1"; 
       break; 
      case 2: 
       cout<<"action 2"; 
       break; 
      default: 
       cout<<"unknown command"; 
       break; 
     } 
    } while(1==1); 

}

Как обрабатывать ввод:

// iostream_cin.cpp 
// compile with: /EHsc 
#include <iostream> 
using namespace std; 

int main() 
{ 
    int x; 
    cout << "enter choice:"; 
    cin >> x; 
    while (x < 1 || x > 4) 
    { 
     cout << "Invalid choice, try again:"; 
     cin >> x; 
     // not a numeric character, probably 
     // clear the failure and pull off the non-numeric character 
     if (cin.fail()) 
     { 
     cin.clear(); 
     char c; 
     cin >> c; 
     } 
    } 
} 
+0

, то как обрабатывать типы символов? любая обработка ошибок? – 2009-11-21 14:38:53

+0

Сделайте x a char и чем проанализируйте его значение или ограничьте ввод legnth Я добавил что-то к редактированию из msdn - как обрабатывать ошибки cin: – Dani

0
  1. Я не могу скомпилировать в своем VS2008, если я не включу для cin, cout для работы.
  2. После того, что он работает нормально - он печатает «неизвестной команды» для других значений, чем 1 и 2.
+0

вы имеете в виду также значения char? что произойдет, если вы дадите 'c' или любой другой алфавит? – 2009-11-21 14:40:49

+0

Да. В основном в C++, если вы определяете переменную вне основного, они будут инициализированы. Поэтому в вашем случае переменная «x» должна быть инициализирована до нуля. Теперь входной сигнал char не работает, однако значение остается равным нулю, поэтому оно всегда должно попадать в раздел «по умолчанию» коммутатора. – Sesh

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