gpt4 book ai didi

c++ - 跳转到 C++ 第 5 章问题 7

转载 作者:行者123 更新时间:2023-11-30 04:02:06 25 4
gpt4 key购买 nike

按照建议,我一直在阅读“Jumping into c++”一书。我目前正在处理第 5 章的第 7 题,虽然我生成的代码似乎可以满足我的要求,但我希望有人能够看一下并告诉我我是否实现了任何“不良”做法(理想情况下,我不想养成坏习惯)。

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

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

最后一件事...我的代码中没有“返回 0”,这是个问题吗?我发现 return 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 << "*";
}


}

最佳答案

关于main中的返回0 : 在 C++ 中它是可选的。

关于您的代码:

  • 你有一吨 if/else if block ,你应该用 switch 替换它们. switch 语句更紧凑、更易读,并且在运行时可能会更快一些。在这一点上这并不重要,但了解在哪里放置开关以及在何处使用常规 if 是一个很好的做法。

  • 你有一个很大的功能,它真的很糟糕。您应该将代码分解成小的、可重用的部分。这就是所谓的 DRY(不要重复自己):如果您复制粘贴代码,那么您做错了什么。例如,您的运动列表在您的代码中出现了 2 次,您应该将其移动到一个单独的函数中。

  • 您写了 cout << "" << endl; ,我想你真的不明白如何std::cout工作。 std::cout是表示程序标准输出的对象。您可以使用 operator<<将值传递给此标准输出。 std::endl是您可以传递的这些值之一,字符串也是。所以你可以写cout << endl; ,不需要空字符串。

  • 请学习如何使用数组,原始数组或 std::array .这是一个很好的程序示例,可以使用数组进行重构。

这是一个更易读、更清晰的代码版本:

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

关于c++ - 跳转到 C++ 第 5 章问题 7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25383416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com