按照建议,我已经完成了本书“跳入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 << "*";
}
}
答案 0 :(得分:1)
关于main
中的返回0:它在C ++中是可选的。
关于您的代码:
您有大量的if
/ else if
块,您应该用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]);
}
答案 1 :(得分:1)
如果别的话你太多了,它太乱了。 检查下面的代码,muc更短,更清洁和有效。 我希望它有所帮助。
#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;
}