C ++中的基本问题

时间:2009-11-21 14:25:28

标签: c++ stl visual-c++

我是C ++的新手,我对这个程序感到困惑。我在Visual Studio 2008中将其作为win32控制台应用程序运行。

    #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以外的任何内容时,它不会在交换机中显示默认选项。我无法弄清楚这个问题。我该如何解决这个问题?

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

这个作品 - 仅适用于int(如果你输入一个字符......它会变得混乱)

#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;
      }
   }
}

答案 2 :(得分:0)

  1. 我无法在我的VS2008中编译,除非我包括cin,cout工作。
  2. 之后它运行正常 - 它为1和2以外的值打印'未知命令'。