Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 跳入c++;第5章问题7_C++_Scaling - Fatal编程技术网

C++ 跳入c++;第5章问题7

C++ 跳入c++;第5章问题7,c++,scaling,C++,Scaling,根据推荐,我一直在阅读《跳入c++》一书。我目前正在处理第5章的问题7,虽然我已经生成了代码,似乎可以完成要求我做的事情,但我希望有人能看一下并告诉我是否实现了任何“坏”实践(理想情况下,我不想已经养成坏习惯) 其次,它还说“试着制作一个条形图,显示结果,无论输入多少个结果,都可以适当地缩放以适合您的屏幕”。同样,下面的代码生成了一个水平条形图,但我不确定如果我有10000个条目(我想我可以通过添加一个额外的for循环来验证这一点),它是否会根据需要进行缩放。如何应用这一点?(这样无论有多少个条

根据推荐,我一直在阅读《跳入c++》一书。我目前正在处理第5章的问题7,虽然我已经生成了代码,似乎可以完成要求我做的事情,但我希望有人能看一下并告诉我是否实现了任何“坏”实践(理想情况下,我不想已经养成坏习惯)

其次,它还说“试着制作一个条形图,显示结果,无论输入多少个结果,都可以适当地缩放以适合您的屏幕”。同样,下面的代码生成了一个水平条形图,但我不确定如果我有10000个条目(我想我可以通过添加一个额外的for循环来验证这一点),它是否会根据需要进行缩放。如何应用这一点?(这样无论有多少个条目,它都能正确缩放)

在这一点上,我可能应该指出,我还没有涉及数组、指针和类等主题,以防有人好奇我为什么不创建一个名为“投票”之类的类

最后一件事。。。我的代码中没有“返回0”,这是问题吗?我发现返回0的确切意义有点混淆。我知道这是为了确保你的代码正常运行,但这似乎有点多余

提前谢谢

#include <iostream>

using namespace std;

int main()
{
    int option;
    int option_1 = 0;
    int option_2 = 0;
    int option_3 = 0;
    cout << "Which is your favourite sport?" << endl;
    cout << "Tennis.. 1" << endl;
    cout << "Football.. 2" << endl;
    cout << "Cricket.. 3" << endl;

    cin >> option;
while(option != 0)
{
    if(option == 1)
    {
        option_1++;
    }
    else if(option ==2)
    {
        option_2++;
    }
    else if(option ==3)
    {
        option_3++;
    }
    else if(option > 3 || option < 0)
    {
        cout << "Not a valid entry, please enter again" << endl;
    }
    else if(option ==0)
    {
        break;
    }
    cout << "Which is your favourite sport?" << endl;
    cout << "Tennis.. 1" << endl;
    cout << "Football.. 2" << endl;
    cout << "Cricket.. 3" << endl;
    cin >> option;
}
    cout << "Option 1 (" << option_1 << "): ";
    for(int i = 0; i < option_1; i++)
    {
        cout << "*";
    }
    cout << "" << endl;
    cout << "Option 2 (" << option_2 << "): ";
        for(int i = 0; i < option_2; i++)
    {
        cout << "*";
    }
    cout << "" << endl;
    cout << "Option 3 (" << option_3 << "): ";
        for(int i = 0; i < option_3; i++)
    {
        cout << "*";
    }


}
#包括
使用名称空间std;
int main()
{
int选项;
int选项_1=0;
int选项_2=0;
int选项_3=0;

关于<代码> >主< <代码>中的返回0的CUT< P>:在C++中是可选的。 关于您的代码:

#include <iostream>

int prompt_option()
{
    int option;

    while (true)
    {
        std::cout << "Which is your favourite sport?" << std::endl;
        std::cout << "Tennis.. 1" << std::endl;
        std::cout << "Football.. 2" << std::endl;
        std::cout << "Cricket.. 3" << std::endl;
        std::cin >> option;
        if (option >= 0 && option <= 3)
            return option;
        else
            std::cout << "Not a valid entry, please enter again" << std::endl;
    }
}

void display_option(int number, int value)
{
    std::cout << "Option " << number << " (" << value << "): ";
    while (value--)
        std::cout << '*';
    std::cout << std::endl;
}

int main()
{
    int option;
    int values[3] = {0};

    while (true)
    {
        option = prompt_option();
        if (option)
            values[option - 1]++;
        else
            break;
    }
    for (int i = 0; i < 3; i++)
        display_option(i + 1, values[i]);
}
  • 你有大量的
    if
    /
    或者
    块,如果
    块,你应该用
    开关来替换它们。开关语句更紧凑,可读性更强,在运行时可能会更快一些。这一点并不重要,但知道开关放在哪里以及在哪里使用常规if是一个很好的实践

  • 你有一个很大的函数,它非常糟糕。你应该把代码分成可重用的小块。这就是所谓的“干”(不要重复):如果你复制粘贴代码,你就做错了。例如,你的运动列表在代码中出现了两次,你应该在一个单独的函数中移动它


  • 你写了
    cout你的东西太多了,否则会很乱。
    看看下面的代码,短一点,干净一点,效率高一点。
    我希望有帮助

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        int choice;
        int soccer=0, NFL=0 ,formula1=0;
        while(choice != 0){
            cout<<"Please choose one of the following for the poll"<<endl;
            cout<<"press 1 for soccer, press 2 for NFL, press 3 for formula 1"<<endl;
            cout<<"Press 0 to exit"<<endl;
            cin>>choice;
            if(choice==1){
                soccer++;
    
            }
            else if(choice==2){
                NFL++;
    
            }
            else if(choice == 3){
                formula1++;
    
            }
            else{
                cout<<"Invalid entry, try again"<<endl;
            }
            cout<<"soccer chosen "<<soccer<<" times.";
            for(int i=0; i<soccer; i++){
                cout<<"*";
            }
            cout<<endl;
    
            cout<<"NFL chosen "<<NFL<<" times.";
            for(int j=0; j<NFL; j++){
                cout<<"*";
            }
            cout<<endl;
            cout<<"formula1 chosen "<<formula1<<" times.";
            for(int c=0; c<formula1; c++){
                cout<<"*";
            }
            cout<<endl;
    
    
    
        }
    
        return 0;
    }
    
    #包括
    使用名称空间std;
    int main()
    {
    智力选择;
    int足球=0,NFL=0,公式1=0;
    while(选项!=0){
    
    coutBelongs说“我知道这是为了确保你的代码正常运行”没有。但这似乎有点多余是的。通常,指定返回类型的函数定义应该有一个带有该类型某些值的返回语句。但是,在许多情况下,函数的返回值会被忽略。这是stackoverflow讨论的。非常感谢您的广泛回复。我添加cout>>“”>>纯粹是为了在输出之间创建一个行分隔。在前面按enter键…我将在数组中再次尝试此问题,感谢您的建议,这是一个非常好的主意。再次,您对代码的复制和粘贴是完全正确的-我确实做到了。再次感谢您的深入响应,非常感谢添加std::cout和不使用std::之间的区别是什么?从哪里可以看出switch语句在运行时更快?在我测试过的大多数系统中,情况正好相反。