none
C++问题 RRS feed

  • 问题

  • #include<iostream>
    #include<string>
    using namespace std;
    int main()
    {
     char a[]={"一二"},b[]={"一二三"},x;
        while(true)
     {
     cout<<"请输入"<<endl;
        cin>>x;
        if(sizeof x==sizeof a)
        {
             string xx=x;
             switch(xx)
             {
                       case "关羽":
                            cout<<"历史名将"<<endl;
           case "江姐":
             cout<<"革命前辈"<<endl;
           default:
                            cout<<"没有记载"<<endl;
             }
        }
        if(sizeof x==sizeof b)
        {
             string xx=x;
             switch(xx)
             {
                       case "刘伯承":
                            cout<<"中国十大元帅之一"<<endl;
                       case "杨靖宇":
                            cout<<"民族英雄"<<endl;
                       default:
                            cout<<"没有记载"<<endl;
             }
        }
        system("pause");
     }
        return 0;
    }

    上述代码为什么错误?

    2009年9月29日 8:30

答案

  • x是char类型的,不能和string类进行转换。
    字符串类型才行(char*或者char[])。
    0xBAADF00D

    问题是switch(参数)
    参数不能为string  类型;还有就是不能用char类型初始化string类的对像
    #include<iostream>
    #include<string>
    using namespace std;
    int main()
    {
     char ca;
     cin>>ca;
     string strb;                       //这个可以正常运行(vc 6.0)
     strb=ca;
     switch(ca)
        {
          case 'b'  : cout<<"fasdf";break;
          default   :  cout<<"ghdhfg";
       }
       return 0;
    }
    /////////////////////////////////////////////////////
    #include<iostream>
    #include<string>
    using namespace std;
    int main()
    {
     char ca;
     cin>>ca;
     string strb=ca;                       //这个会报错(vc 6.0)
     switch(ca)
        {
          case 'b'  : cout<<"fasdf";break;
          default   :  cout<<"ghdhfg";
       }
       return 0;
    }
    //////////////////////////////////////////////////////////
    #include<iostream>
    #include<string>
    using namespace std;
    int main()
    {
     char ca;
     cin>>ca;
     string strb;                       //这个也会报错和上面的那个一样(vc 6.0)
     strb=ca;
     switch(strb)
        {
          case 'b'  : cout<<"fasdf";break;
          default   :  cout<<"ghdhfg";
       }
       return 0;
    }

    ///////////////////////////////////////
    还有就是你的while(true)是个死循环,因为你的while()循环体中没有break;但你测试的条件表达式却一直为真
    冰冻三尺非一日之寒,为了共同的梦想...........努力........在努力.......成功
    2009年10月17日 7:17
  • 这个程序中循环是永真循环,switch的case下面没有break 要是有输出的话输出也是一样的将所有字符串都输出。
    char不能为string进行赋值。
    switch的条件应该是整型或是能自动转化为整型的数据

    2009年10月17日 8:43

全部回复

  • 死循环。


    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful.
    Visual C++ MVP
    2009年9月29日 16:55
    版主
  • 不会是死循环的错吧?

    2009年9月30日 6:38
  • 我看不懂英文,请讲汉语。

    2009年10月1日 11:28
  • x是char类型的,不能和string类进行转换。
    字符串类型才行(char*或者char[])。
    0xBAADF00D
    2009年10月2日 10:32
    版主
  • 朋友,您好
    请查看程序中的逻辑语句,条件语句。
    Smile service,common progress!
    2009年10月7日 11:54
  • char类型的x无法转换为string类型,声明时应该写作char c[100]或char *c = new char[100];
    2009年10月8日 12:43
  • 不知道是不是你写的,依我看问题可多了]

     char a[]={"一二"},b[]={"一二三"},x;
        while(true)
     {
     cout<<"请输入"<<endl;
        cin>>x;//你的X是字符呀
    • 已编辑 张月松 2009年10月8日 13:27
    2009年10月8日 13:25
  • x是char类型的,不能和string类进行转换。
    字符串类型才行(char*或者char[])。
    0xBAADF00D

    问题是switch(参数)
    参数不能为string  类型;还有就是不能用char类型初始化string类的对像
    #include<iostream>
    #include<string>
    using namespace std;
    int main()
    {
     char ca;
     cin>>ca;
     string strb;                       //这个可以正常运行(vc 6.0)
     strb=ca;
     switch(ca)
        {
          case 'b'  : cout<<"fasdf";break;
          default   :  cout<<"ghdhfg";
       }
       return 0;
    }
    /////////////////////////////////////////////////////
    #include<iostream>
    #include<string>
    using namespace std;
    int main()
    {
     char ca;
     cin>>ca;
     string strb=ca;                       //这个会报错(vc 6.0)
     switch(ca)
        {
          case 'b'  : cout<<"fasdf";break;
          default   :  cout<<"ghdhfg";
       }
       return 0;
    }
    //////////////////////////////////////////////////////////
    #include<iostream>
    #include<string>
    using namespace std;
    int main()
    {
     char ca;
     cin>>ca;
     string strb;                       //这个也会报错和上面的那个一样(vc 6.0)
     strb=ca;
     switch(strb)
        {
          case 'b'  : cout<<"fasdf";break;
          default   :  cout<<"ghdhfg";
       }
       return 0;
    }

    ///////////////////////////////////////
    还有就是你的while(true)是个死循环,因为你的while()循环体中没有break;但你测试的条件表达式却一直为真
    冰冻三尺非一日之寒,为了共同的梦想...........努力........在努力.......成功
    2009年10月17日 7:17
  • 这个程序中循环是永真循环,switch的case下面没有break 要是有输出的话输出也是一样的将所有字符串都输出。
    char不能为string进行赋值。
    switch的条件应该是整型或是能自动转化为整型的数据

    2009年10月17日 8:43