-8

私は C++ の経験が非常に限られているため、自分のコードから "goto" 構造を置き換えたいと考えていました。リファクタリングの提案も

int main()
{ 
    int count;
    int countSub = 0;
    int userCount = 0;
    int roleCount = 0;
    int parentGroup;
    cout<<"enter a number of parentGroup"<< endl;
    cin>> parentGroup;
    int subGroup;
    cout<<"enter a number sub Group"<< endl;
    cin>> subGroup;
    int rolePerGroup;
    cout<<"enter a number role per Sub Group"<< endl;
    cin>> rolePerGroup;
    int userPerGroup;
    cout<<"enter a number user per Role"<< endl;
    cin>> userPerGroup;

    do
    {
        if (parentGroup == 0) 
        { 
            cout<<"Error"<<endl;
            exit(EXIT_FAILURE);
        }
        else
        {

            for(count=1;count <= parentGroup; count ++)
            {
                do
                {
                    if(subGroup == 0) goto hello;

                    else
                    {
                        for(countSub = 1;countSub<=subGroup; countSub ++)
                        { 
                            do
                            {
                                hello: 
                                if (rolePerGroup == 0)
                                {
                                    cout<<"Error"<<endl;
                                    exit(EXIT_FAILURE);
                                }

                                else
                                {

                                    for(roleCount = 1; roleCount<=rolePerGroup; roleCount ++)
                                    { 

                                        do
                                        {
                                            if(userPerGroup == 0) goto print;
                                            else
                                            {

                                                    for(userCount = 1; userCount<=userPerGroup; userCount ++)
                                                {

                                                        print:
    cout<<"Parent groups are: "<< count <<" | "<<"Sub group are : "<<countSub<<" | "<<"Role per Sub group are : "<< roleCount <<" | "<<"User per role are : "<< userCount <<endl;
                                                }}
                                            userCount --;
                                        }while(userCount < 0);
                                    }}
                                roleCount --;
                            }while(roleCount < 0);
                        }}
                    countSub --;
                }while(countSub < 0);
            }}
        count --;
    }while(count < 0);
}
4

2 に答える 2

0

削除したい goto の 1 つ:

if(subGroup == 0) goto hello;
else
{
    for(countSub = 1;countSub<=subGroup; countSub ++) {
        do {
           hello: 
...

したがって、私が正しく理解している場合は、subGroupが 0 または 1 に等しい場合、1 回の反復を実行する必要があります。後藤はfor-loop一度に入る事です。

私が呼び出す変数N(良い名前ではありません)を使用して、次のことを行うことをお勧めします。

int N = subGroup == 0 ? 1 : subGroup;
for(countSub = 1;countSub <= N; countSub++) {

もう見えません。もう 1 つを修正しようとはしませんが、同じ問題だと思います。

于 2013-07-17T16:37:13.497 に答える