代码的优化问题

vloso 2018-07-06 03:51:18
#include <iostream>
#include <string>
using namespace std;
struct Patrons
{
string Name;
double Money;
};
int main()
{
string name;
double money;
int Personnel=0,x=0;
cout<<"请输入捐款人数为:";
cin>>Personnel;
Patrons Fund[Personnel];
for(int i=0; i<Personnel; i++)
{
cout<<"姓名:";
cin>>name;
cout<<"捐款金额:";
cin>>money;
cout<<endl;
Fund[i].Name=name;
Fund[i].Money=money;
}
for(int i=0; i<Personnel; i++)
if( Fund[i].Money>1000)
{
cout<<Fund[i].Name<<" 先生/女士, 捐款了:"<<Fund[i].Money<<endl;
++x;
}
if(x==0)
cout<<"none";


return 0;
}



题目意思:输入捐款数,创建N个捐款人,,捐款超1000就记录,如所有捐款人达不到1000就输出 none

题目应该是做了出来了,,,,但是有一点我经常用这个办法解决(自己创建判断条件++x),我感觉应该还有更简便的方法吧


if( Fund[i].Money>1000)
{
cout<<Fund[i].Name<<" 先生/女士, 捐款了:"<<Fund[i].Money<<endl;
++x;
}

我总感觉 在创建一个 判断条件 ++x 不美观也好像不规范!所以我想问一下有没有更好的方法!!

这个问题为什么要提问啦!!因为我很多代码都是通过自己创建判断 0 或者大于 1来判断,问题虽然解决了,但是看上去好像不规范的感觉!!所有请问大家如何书写这样的情况的

...全文
206 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
vloso 2018-07-06
  • 打赏
  • 举报
回复
引用 5 楼 zhao4zhong1 的回复:
在不超过总共一万行代码的项目中,估计你是看不出过来人是怎么写令后辈尊敬的代码的。我猜。




老赵总是那么高深莫测!!!!!
vloso 2018-07-06
  • 打赏
  • 举报
回复



引用 13 楼 wushuangge 的回复:
[quote=引用 11 楼 vloso 的回复:]
[quote=引用 10 楼 wushuangge 的回复:]
for(int i=0; i<Personnel; i++)
{
cout<<"姓名:";
cin>>name;
cout<<"捐款金额:";
cin>>money;
cout<<endl;

//或者把大于1000的人 存到另一个结构中去,然后遍历大于1000的结构,这样会效率很多
if( money>1000)
{
cout<<name<<" 先生/女士, 捐款了:"<<money<<endl;
++x;
}
}


看了哥们的代码,表示理解,但是你这个问题在于直接输出 而不是做到一次性统计的效果,,比喻输入10个只要符合了就输出,相对显得混乱,而我的情况是首先输入10个后再进行统计处理!!!



[/quote]
那你也可以把符合条件的先存起来,不符合的丢弃,然后再输出,这样会减少很多遍历次数,[/quote]


[color=#FF0000]我明白兄弟的意思,,但是我学习的知识就是通过循环+数组来得出结果,比喻a[i]其实他就是通过循环一直改变数组名称得出变量名字储存结果,

当然举一反三的情况是,我可以将第一个for 循环里面加入一个判断 >1000 记录答案,再通过另外一个循环 遍历出来

这样遍历出来的答案就全部是自己想要的,错误的就丢弃了,

兄弟的是细节问题,学习受教了谢谢



[/color]
月棠 2018-07-06
  • 打赏
  • 举报
回复
引用 11 楼 vloso 的回复:
[quote=引用 10 楼 wushuangge 的回复:]
for(int i=0; i<Personnel; i++)
{
cout<<"姓名:";
cin>>name;
cout<<"捐款金额:";
cin>>money;
cout<<endl;

//或者把大于1000的人 存到另一个结构中去,然后遍历大于1000的结构,这样会效率很多
if( money>1000)
{
cout<<name<<" 先生/女士, 捐款了:"<<money<<endl;
++x;
}
}


看了哥们的代码,表示理解,但是你这个问题在于直接输出 而不是做到一次性统计的效果,,比喻输入10个只要符合了就输出,相对显得混乱,而我的情况是首先输入10个后再进行统计处理!!!



[/quote]
那你也可以把符合条件的先存起来,不符合的丢弃,然后再输出,这样会减少很多遍历次数,
vloso 2018-07-06
  • 打赏
  • 举报
回复
引用 6 楼 baiywcwttfln 的回复:
这代码编不过吧

int Personnel=0,x=0;
cout<<"请输入捐款人数为:";
cin>>Personnel;
Patrons Fund[Personnel];

Personnel必须是编译期常量

至于你的问题,一般都是这么干,也不觉得有什么美不美观,不规范的,顶多就让变量命名有意义,增加可读性


int Personnel 是一个变量 他需要判断数组数跟循环次数,,如果用常量就不行了,因为他不是固定的创建数量!!

你意思是 数组要 const int Personnel 这样吗??

vloso 2018-07-06
  • 打赏
  • 举报
回复
引用 10 楼 wushuangge 的回复:
for(int i=0; i<Personnel; i++)
{
cout<<"姓名:";
cin>>name;
cout<<"捐款金额:";
cin>>money;
cout<<endl;

//或者把大于1000的人 存到另一个结构中去,然后遍历大于1000的结构,这样会效率很多
if( money>1000)
{
cout<<name<<" 先生/女士, 捐款了:"<<money<<endl;
++x;
}
}


看了哥们的代码,表示理解,但是你这个问题在于直接输出 而不是做到一次性统计的效果,,比喻输入10个只要符合了就输出,相对显得混乱,而我的情况是首先输入10个后再进行统计处理!!!



月棠 2018-07-06
  • 打赏
  • 举报
回复
for(int i=0; i<Personnel; i++)
{
cout<<"姓名:";
cin>>name;
cout<<"捐款金额:";
cin>>money;
cout<<endl;

//或者把大于1000的人 存到另一个结构中去,然后遍历大于1000的结构,这样会效率很多
if( money>1000)
{
cout<<name<<" 先生/女士, 捐款了:"<<money<<endl;
++x;
}
}

月棠 2018-07-06
  • 打赏
  • 举报
回复
两个for循环可以合并到一起呀,你这样for循环两次,效率多低啊
狐狸小十 2018-07-06
  • 打赏
  • 举报
回复
你这个问题的实质,是在一次循环中做了两项任务
一个要求完成整次循环,另一个满足条件即break
可以把循环拆开
int i=0;
for(;i<count;++i)
{
//任务1
//任务2
}
for(;i<count;++i)
{
//任务1
}
月棠 2018-07-06
  • 打赏
  • 举报
回复
1.一般不使用 using namespace std; 可以使用std::cout ,std::string 这样的书写方式.
2.如果你觉得 ++x; 不好看,你可写成 x += 1;
3.变量的命名规则问题:你可以参考各种 c++命名规范,我这边使用的是Google C++命名规范.
A-De 2018-07-06
  • 打赏
  • 举报
回复
这代码编不过吧

int Personnel=0,x=0;
cout<<"请输入捐款人数为:";
cin>>Personnel;
Patrons Fund[Personnel];

Personnel必须是编译期常量

至于你的问题,一般都是这么干,也不觉得有什么美不美观,不规范的,顶多就让变量命名有意义,增加可读性
赵4老师 2018-07-06
  • 打赏
  • 举报
回复
在不超过总共一万行代码的项目中,估计你是看不出过来人是怎么写令后辈尊敬的代码的。我猜。
vloso 2018-07-06
  • 打赏
  • 举报
回复
引用 3 楼 thecentry 的回复:
老程序员是不是不用using namespace std;
老程序员是不是不会这么操作

int Personnel=0,x=0;
cout<<"请输入捐款人数为:";
cin>>Personnel;
Patrons Fund[Personnel];

你的题目是不是有歧义,看你写程序的意思是所有捐款人中不存在捐款超过1000的就输出none。
哈哈!仅代表个人观点。



晕,,这个是书本练习题,,,,怎么说到我有歧义啊,天大的冤枉啊,习题练习而已!!我只是想看看大家一些书写方式我好理解改进而已!
开源学开源 2018-07-06
  • 打赏
  • 举报
回复
老程序员是不是不用using namespace std;
老程序员是不是不会这么操作

int Personnel=0,x=0;
cout<<"请输入捐款人数为:";
cin>>Personnel;
Patrons Fund[Personnel];

你的题目是不是有歧义,看你写程序的意思是所有捐款人中不存在捐款超过1000的就输出none。
哈哈!仅代表个人观点。
vloso 2018-07-06
  • 打赏
  • 举报
回复
引用 1 楼 focuslight 的回复:
你可以给创建变量起个有意义的名称


变量名也是一个问题,就是想知道一些高手 老程序员 是怎么写的!
Isnis-fallen 2018-07-06
  • 打赏
  • 举报
回复
你可以给创建变量起个有意义的名称

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧