大神帮忙看看什么问题

vloso 2018-05-24 02:09:47
#include<iostream>
//using namespace std;

void square(int&,int&);
void cube(int&,int&);
void swap(int&,int&);
void getVals(int&,int&);
void printVals(int,int);

int main()
{

int valOne=1 ,valTwo=2;
int choice,i;
const int maxArray=5;

void(*pFuncArray[maxArray])(int&,int&);


for(i=0;i<maxArray;i++)
{
std::cout<<"(0) Quit (1) Change Values "<< "(2) Square(3) Cube(4) Swap:";
std::cin>>choice;
switch(choice)
{

case 1:
pFuncArray[i]=getVals;
break;

case 2:
pFuncArray[i]=square;
break;

case 3:
pFuncArray[i]=cube;
break;

case 4:

pFuncArray[i]=swap;

default:
pFuncArray[i]=0;

}
}

for(i=0;i<maxArray;i++)
{
pFuncArray[i](valOne,valTwo);
printVals(valOne,valTwo);

}

return 0;
}

void printVals(int x,int y)
{
std::cout<<"x:"<<x<<" y:"<<y<<"\n";
}

void square(int&rX,int&rY)
{
rX*=rX;
rY*=rY;
}

void cube(int&rX,int&rY)
{
int tmp;
tmp=rX;
rX*=rX;
rX=rX*tmp;

tmp=rY;
rY*=rY;
rY=rY*tmp;

}

void swap(int&rX,int&rY)
{
std::cout<<"CCCC"<<"\n";
int temp;
temp=rX;
rX=rY;
rY=temp;
}
void getVals(int &rValone,int &rValTwo)
{
std::cout<<"AAAAAAAAAAAAA:";
std::cin>>rValone;
std::cout<<"BBBBBBBBBBBBB:";
std::cin>>rValTwo;
}


输入 1 2 3 4 2 2 3 , 他没办法识别 pFuncArray[i]=swap; 可能水平不够真的检测不到什么原因
...全文
181 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
自信男孩 2018-05-24
  • 打赏
  • 举报
回复
引用 4 楼 vloso 的回复:
[quote=引用 3 楼 cfjtaishan 的回复:] [quote=引用 2 楼 vloso 的回复:] [quote=引用 1 楼 cfjtaishan 的回复:]
#include<iostream>
//using namespace std;

void square(int&,int&);
void cube(int&,int&);
void swap(int&,int&);
void getVals(int&,int&);
void printVals(int,int);

int main()
{
    int valOne=1 ,valTwo=2;
    int choice,i;
    const int maxArray=5;

    void(*pFuncArray[maxArray])(int&,int&);

    for(i=0;i<maxArray;i++)
    {
        std::cout<<"(0) Quit (1) Change Values "<< "(2) Square(3) Cube(4) Swap:";
        std::cin>>choice;
        switch(choice)
        {

            case 1:
                pFuncArray[1]=getVals;
                break;

            case 2:
                pFuncArray[2]=square;
                break;

            case 3:
                pFuncArray[3]=cube;
                break;

            case 4:

                pFuncArray[4]=swap;

            default:
                pFuncArray[0]=0;

        }
    }

    for(i=0;i<maxArray;i++)
    {
        if (pFuncArray[i])
            pFuncArray[i](valOne,valTwo);
        printVals(valOne,valTwo);

    }

    return 0;
}

void printVals(int x,int y)
{
    std::cout<<"x:"<<x<<"  y:"<<y<<"\n";
}

void  square(int&rX,int&rY)
{
    rX*=rX;
    rY*=rY;
}

void cube(int&rX,int&rY)
{
    int tmp;
    tmp=rX;
    rX*=rX;
    rX=rX*tmp;

    tmp=rY;
    rY*=rY;
    rY=rY*tmp;

}

void swap(int&rX,int&rY)
{
    std::cout<<"CCCC"<<"\n";
    int temp;
    temp=rX;
    rX=rY;
    rY=temp;
}
void getVals(int &rValone,int &rValTwo)
{
    std::cout<<"AAAAAAAAAAAAA:";
    std::cin>>rValone;
    std::cout<<"BBBBBBBBBBBBB:";
    std::cin>>rValTwo;
}
参考一下吧 注意最后一个default函数指针指向NULL。因此在调用时需要做一下判断。 感觉没必要用for和switch case给函数指针数组赋值。 直接定义成这样就可以,因为函数指针指向那个函数事先需要确定了。
int main()
{
    int valOne=1 ,valTwo=2;
    int choice,i;
    const int maxArray=5;

    void(*pFuncArray[maxArray])(int&,int&);

#if 1
    i = 0;
    pFuncArray[i++] = getVals;
    pFuncArray[i++] = square;
    pFuncArray[i++] = cube;
    pFuncArray[i++] = swap;
    pFuncArray[i] = NULL;
#else
    for(i=0;i<maxArray;i++)
    {
        std::cout<<"(0) Quit (1) Change Values "<< "(2) Square(3) Cube(4) Swap:";
        std::cin>>choice;
        switch(choice)
        {

            case 1:
                pFuncArray[1]=getVals;
                break;

            case 2:
                pFuncArray[2]=square;
                break;

            case 3:
                pFuncArray[3]=cube;
                break;

            case 4:

                pFuncArray[4]=swap;

            default:
                pFuncArray[0]=0;

        }
    }
#endif
    for(i=0;i<maxArray;i++)
    {
        if (pFuncArray[i]) {
            pFuncArray[i](valOne,valTwo);
            printVals(valOne,valTwo);
        }

    }

    return 0;
}
他是教程,都是按照教程写的,但是寻找问题的时候找不到错误的地方[/quote] 你看一下你的switch case中pFuncArray中使用的是i,并不是1, 2,3[/quote] 按照教程抄的,就是读不了 case 4 这个函数![/quote] 我改过之后是可以读到4的函数的。 建议将我的代码运行一下,看是否有问题。 我用#if #else #end隔开的部分,就是if内和else内的都可以使用。
vloso 2018-05-24
  • 打赏
  • 举报
回复
引用 3 楼 cfjtaishan 的回复:
[quote=引用 2 楼 vloso 的回复:] [quote=引用 1 楼 cfjtaishan 的回复:]
#include<iostream>
//using namespace std;

void square(int&,int&);
void cube(int&,int&);
void swap(int&,int&);
void getVals(int&,int&);
void printVals(int,int);

int main()
{
    int valOne=1 ,valTwo=2;
    int choice,i;
    const int maxArray=5;

    void(*pFuncArray[maxArray])(int&,int&);

    for(i=0;i<maxArray;i++)
    {
        std::cout<<"(0) Quit (1) Change Values "<< "(2) Square(3) Cube(4) Swap:";
        std::cin>>choice;
        switch(choice)
        {

            case 1:
                pFuncArray[1]=getVals;
                break;

            case 2:
                pFuncArray[2]=square;
                break;

            case 3:
                pFuncArray[3]=cube;
                break;

            case 4:

                pFuncArray[4]=swap;

            default:
                pFuncArray[0]=0;

        }
    }

    for(i=0;i<maxArray;i++)
    {
        if (pFuncArray[i])
            pFuncArray[i](valOne,valTwo);
        printVals(valOne,valTwo);

    }

    return 0;
}

void printVals(int x,int y)
{
    std::cout<<"x:"<<x<<"  y:"<<y<<"\n";
}

void  square(int&rX,int&rY)
{
    rX*=rX;
    rY*=rY;
}

void cube(int&rX,int&rY)
{
    int tmp;
    tmp=rX;
    rX*=rX;
    rX=rX*tmp;

    tmp=rY;
    rY*=rY;
    rY=rY*tmp;

}

void swap(int&rX,int&rY)
{
    std::cout<<"CCCC"<<"\n";
    int temp;
    temp=rX;
    rX=rY;
    rY=temp;
}
void getVals(int &rValone,int &rValTwo)
{
    std::cout<<"AAAAAAAAAAAAA:";
    std::cin>>rValone;
    std::cout<<"BBBBBBBBBBBBB:";
    std::cin>>rValTwo;
}
参考一下吧 注意最后一个default函数指针指向NULL。因此在调用时需要做一下判断。 感觉没必要用for和switch case给函数指针数组赋值。 直接定义成这样就可以,因为函数指针指向那个函数事先需要确定了。
int main()
{
    int valOne=1 ,valTwo=2;
    int choice,i;
    const int maxArray=5;

    void(*pFuncArray[maxArray])(int&,int&);

#if 1
    i = 0;
    pFuncArray[i++] = getVals;
    pFuncArray[i++] = square;
    pFuncArray[i++] = cube;
    pFuncArray[i++] = swap;
    pFuncArray[i] = NULL;
#else
    for(i=0;i<maxArray;i++)
    {
        std::cout<<"(0) Quit (1) Change Values "<< "(2) Square(3) Cube(4) Swap:";
        std::cin>>choice;
        switch(choice)
        {

            case 1:
                pFuncArray[1]=getVals;
                break;

            case 2:
                pFuncArray[2]=square;
                break;

            case 3:
                pFuncArray[3]=cube;
                break;

            case 4:

                pFuncArray[4]=swap;

            default:
                pFuncArray[0]=0;

        }
    }
#endif
    for(i=0;i<maxArray;i++)
    {
        if (pFuncArray[i]) {
            pFuncArray[i](valOne,valTwo);
            printVals(valOne,valTwo);
        }

    }

    return 0;
}
他是教程,都是按照教程写的,但是寻找问题的时候找不到错误的地方[/quote] 你看一下你的switch case中pFuncArray中使用的是i,并不是1, 2,3[/quote] 按照教程抄的,就是读不了 case 4 这个函数!
自信男孩 2018-05-24
  • 打赏
  • 举报
回复
引用 2 楼 vloso 的回复:
[quote=引用 1 楼 cfjtaishan 的回复:]
#include<iostream>
//using namespace std;

void square(int&,int&);
void cube(int&,int&);
void swap(int&,int&);
void getVals(int&,int&);
void printVals(int,int);

int main()
{
    int valOne=1 ,valTwo=2;
    int choice,i;
    const int maxArray=5;

    void(*pFuncArray[maxArray])(int&,int&);

    for(i=0;i<maxArray;i++)
    {
        std::cout<<"(0) Quit (1) Change Values "<< "(2) Square(3) Cube(4) Swap:";
        std::cin>>choice;
        switch(choice)
        {

            case 1:
                pFuncArray[1]=getVals;
                break;

            case 2:
                pFuncArray[2]=square;
                break;

            case 3:
                pFuncArray[3]=cube;
                break;

            case 4:

                pFuncArray[4]=swap;

            default:
                pFuncArray[0]=0;

        }
    }

    for(i=0;i<maxArray;i++)
    {
        if (pFuncArray[i])
            pFuncArray[i](valOne,valTwo);
        printVals(valOne,valTwo);

    }

    return 0;
}

void printVals(int x,int y)
{
    std::cout<<"x:"<<x<<"  y:"<<y<<"\n";
}

void  square(int&rX,int&rY)
{
    rX*=rX;
    rY*=rY;
}

void cube(int&rX,int&rY)
{
    int tmp;
    tmp=rX;
    rX*=rX;
    rX=rX*tmp;

    tmp=rY;
    rY*=rY;
    rY=rY*tmp;

}

void swap(int&rX,int&rY)
{
    std::cout<<"CCCC"<<"\n";
    int temp;
    temp=rX;
    rX=rY;
    rY=temp;
}
void getVals(int &rValone,int &rValTwo)
{
    std::cout<<"AAAAAAAAAAAAA:";
    std::cin>>rValone;
    std::cout<<"BBBBBBBBBBBBB:";
    std::cin>>rValTwo;
}
参考一下吧 注意最后一个default函数指针指向NULL。因此在调用时需要做一下判断。 感觉没必要用for和switch case给函数指针数组赋值。 直接定义成这样就可以,因为函数指针指向那个函数事先需要确定了。
int main()
{
    int valOne=1 ,valTwo=2;
    int choice,i;
    const int maxArray=5;

    void(*pFuncArray[maxArray])(int&,int&);

#if 1
    i = 0;
    pFuncArray[i++] = getVals;
    pFuncArray[i++] = square;
    pFuncArray[i++] = cube;
    pFuncArray[i++] = swap;
    pFuncArray[i] = NULL;
#else
    for(i=0;i<maxArray;i++)
    {
        std::cout<<"(0) Quit (1) Change Values "<< "(2) Square(3) Cube(4) Swap:";
        std::cin>>choice;
        switch(choice)
        {

            case 1:
                pFuncArray[1]=getVals;
                break;

            case 2:
                pFuncArray[2]=square;
                break;

            case 3:
                pFuncArray[3]=cube;
                break;

            case 4:

                pFuncArray[4]=swap;

            default:
                pFuncArray[0]=0;

        }
    }
#endif
    for(i=0;i<maxArray;i++)
    {
        if (pFuncArray[i]) {
            pFuncArray[i](valOne,valTwo);
            printVals(valOne,valTwo);
        }

    }

    return 0;
}
他是教程,都是按照教程写的,但是寻找问题的时候找不到错误的地方[/quote] 你看一下你的switch case中pFuncArray中使用的是i,并不是1, 2,3
vloso 2018-05-24
  • 打赏
  • 举报
回复
引用 1 楼 cfjtaishan 的回复:
#include<iostream>
//using namespace std;

void square(int&,int&);
void cube(int&,int&);
void swap(int&,int&);
void getVals(int&,int&);
void printVals(int,int);

int main()
{
    int valOne=1 ,valTwo=2;
    int choice,i;
    const int maxArray=5;

    void(*pFuncArray[maxArray])(int&,int&);

    for(i=0;i<maxArray;i++)
    {
        std::cout<<"(0) Quit (1) Change Values "<< "(2) Square(3) Cube(4) Swap:";
        std::cin>>choice;
        switch(choice)
        {

            case 1:
                pFuncArray[1]=getVals;
                break;

            case 2:
                pFuncArray[2]=square;
                break;

            case 3:
                pFuncArray[3]=cube;
                break;

            case 4:

                pFuncArray[4]=swap;

            default:
                pFuncArray[0]=0;

        }
    }

    for(i=0;i<maxArray;i++)
    {
        if (pFuncArray[i])
            pFuncArray[i](valOne,valTwo);
        printVals(valOne,valTwo);

    }

    return 0;
}

void printVals(int x,int y)
{
    std::cout<<"x:"<<x<<"  y:"<<y<<"\n";
}

void  square(int&rX,int&rY)
{
    rX*=rX;
    rY*=rY;
}

void cube(int&rX,int&rY)
{
    int tmp;
    tmp=rX;
    rX*=rX;
    rX=rX*tmp;

    tmp=rY;
    rY*=rY;
    rY=rY*tmp;

}

void swap(int&rX,int&rY)
{
    std::cout<<"CCCC"<<"\n";
    int temp;
    temp=rX;
    rX=rY;
    rY=temp;
}
void getVals(int &rValone,int &rValTwo)
{
    std::cout<<"AAAAAAAAAAAAA:";
    std::cin>>rValone;
    std::cout<<"BBBBBBBBBBBBB:";
    std::cin>>rValTwo;
}
参考一下吧 注意最后一个default函数指针指向NULL。因此在调用时需要做一下判断。 感觉没必要用for和switch case给函数指针数组赋值。 直接定义成这样就可以,因为函数指针指向那个函数事先需要确定了。
int main()
{
    int valOne=1 ,valTwo=2;
    int choice,i;
    const int maxArray=5;

    void(*pFuncArray[maxArray])(int&,int&);

#if 1
    i = 0;
    pFuncArray[i++] = getVals;
    pFuncArray[i++] = square;
    pFuncArray[i++] = cube;
    pFuncArray[i++] = swap;
    pFuncArray[i] = NULL;
#else
    for(i=0;i<maxArray;i++)
    {
        std::cout<<"(0) Quit (1) Change Values "<< "(2) Square(3) Cube(4) Swap:";
        std::cin>>choice;
        switch(choice)
        {

            case 1:
                pFuncArray[1]=getVals;
                break;

            case 2:
                pFuncArray[2]=square;
                break;

            case 3:
                pFuncArray[3]=cube;
                break;

            case 4:

                pFuncArray[4]=swap;

            default:
                pFuncArray[0]=0;

        }
    }
#endif
    for(i=0;i<maxArray;i++)
    {
        if (pFuncArray[i]) {
            pFuncArray[i](valOne,valTwo);
            printVals(valOne,valTwo);
        }

    }

    return 0;
}
他是教程,都是按照教程写的,但是寻找问题的时候找不到错误的地方
自信男孩 2018-05-24
  • 打赏
  • 举报
回复
#include<iostream>
//using namespace std;

void square(int&,int&);
void cube(int&,int&);
void swap(int&,int&);
void getVals(int&,int&);
void printVals(int,int);

int main()
{
    int valOne=1 ,valTwo=2;
    int choice,i;
    const int maxArray=5;

    void(*pFuncArray[maxArray])(int&,int&);

    for(i=0;i<maxArray;i++)
    {
        std::cout<<"(0) Quit (1) Change Values "<< "(2) Square(3) Cube(4) Swap:";
        std::cin>>choice;
        switch(choice)
        {

            case 1:
                pFuncArray[1]=getVals;
                break;

            case 2:
                pFuncArray[2]=square;
                break;

            case 3:
                pFuncArray[3]=cube;
                break;

            case 4:

                pFuncArray[4]=swap;

            default:
                pFuncArray[0]=0;

        }
    }

    for(i=0;i<maxArray;i++)
    {
        if (pFuncArray[i])
            pFuncArray[i](valOne,valTwo);
        printVals(valOne,valTwo);

    }

    return 0;
}

void printVals(int x,int y)
{
    std::cout<<"x:"<<x<<"  y:"<<y<<"\n";
}

void  square(int&rX,int&rY)
{
    rX*=rX;
    rY*=rY;
}

void cube(int&rX,int&rY)
{
    int tmp;
    tmp=rX;
    rX*=rX;
    rX=rX*tmp;

    tmp=rY;
    rY*=rY;
    rY=rY*tmp;

}

void swap(int&rX,int&rY)
{
    std::cout<<"CCCC"<<"\n";
    int temp;
    temp=rX;
    rX=rY;
    rY=temp;
}
void getVals(int &rValone,int &rValTwo)
{
    std::cout<<"AAAAAAAAAAAAA:";
    std::cin>>rValone;
    std::cout<<"BBBBBBBBBBBBB:";
    std::cin>>rValTwo;
}
参考一下吧 注意最后一个default函数指针指向NULL。因此在调用时需要做一下判断。 感觉没必要用for和switch case给函数指针数组赋值。 直接定义成这样就可以,因为函数指针指向那个函数事先需要确定了。
int main()
{
    int valOne=1 ,valTwo=2;
    int choice,i;
    const int maxArray=5;

    void(*pFuncArray[maxArray])(int&,int&);

#if 1
    i = 0;
    pFuncArray[i++] = getVals;
    pFuncArray[i++] = square;
    pFuncArray[i++] = cube;
    pFuncArray[i++] = swap;
    pFuncArray[i] = NULL;
#else
    for(i=0;i<maxArray;i++)
    {
        std::cout<<"(0) Quit (1) Change Values "<< "(2) Square(3) Cube(4) Swap:";
        std::cin>>choice;
        switch(choice)
        {

            case 1:
                pFuncArray[1]=getVals;
                break;

            case 2:
                pFuncArray[2]=square;
                break;

            case 3:
                pFuncArray[3]=cube;
                break;

            case 4:

                pFuncArray[4]=swap;

            default:
                pFuncArray[0]=0;

        }
    }
#endif
    for(i=0;i<maxArray;i++)
    {
        if (pFuncArray[i]) {
            pFuncArray[i](valOne,valTwo);
            printVals(valOne,valTwo);
        }

    }

    return 0;
}

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧