C++ 跳入c++;第5章问题7
根据推荐,我一直在阅读《跳入c++》一书。我目前正在处理第5章的问题7,虽然我已经生成了代码,似乎可以完成要求我做的事情,但我希望有人能看一下并告诉我是否实现了任何“坏”实践(理想情况下,我不想已经养成坏习惯) 其次,它还说“试着制作一个条形图,显示结果,无论输入多少个结果,都可以适当地缩放以适合您的屏幕”。同样,下面的代码生成了一个水平条形图,但我不确定如果我有10000个条目(我想我可以通过添加一个额外的for循环来验证这一点),它是否会根据需要进行缩放。如何应用这一点?(这样无论有多少个条目,它都能正确缩放) 在这一点上,我可能应该指出,我还没有涉及数组、指针和类等主题,以防有人好奇我为什么不创建一个名为“投票”之类的类 最后一件事。。。我的代码中没有“返回0”,这是问题吗?我发现返回0的确切意义有点混淆。我知道这是为了确保你的代码正常运行,但这似乎有点多余 提前谢谢C++ 跳入c++;第5章问题7,c++,scaling,C++,Scaling,根据推荐,我一直在阅读《跳入c++》一书。我目前正在处理第5章的问题7,虽然我已经生成了代码,似乎可以完成要求我做的事情,但我希望有人能看一下并告诉我是否实现了任何“坏”实践(理想情况下,我不想已经养成坏习惯) 其次,它还说“试着制作一个条形图,显示结果,无论输入多少个结果,都可以适当地缩放以适合您的屏幕”。同样,下面的代码生成了一个水平条形图,但我不确定如果我有10000个条目(我想我可以通过添加一个额外的for循环来验证这一点),它是否会根据需要进行缩放。如何应用这一点?(这样无论有多少个条
#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语句在运行时更快?在我测试过的大多数系统中,情况正好相反。