我在嵌入式系统中有一个项目,我必须用C编写代码,并使它变得简单。
这是我第一次,这只是一个模拟它应该如何工作。
#include<iostream.h>
#include<stdio.h>
void manualMode();
void defaultMode();
int temp, timeToWash, operation;
int main() {
int mode =0, part=3, waterLevel;
int doorSensor=0, timer = 3,waterLevelSensor = 0, tempSensor = 25;
char startPause;
cout<<"Washing Machine CE224"<<endl;
do{
cout<<"Choose Mode: (1)Default, (2)Manual \n";
cin>>mode;
if (mode == 1)
defaultMode();
if (mode == 2)
manualMode();
}while(mode == 0);
cout<<"Choose Parts to wash: (1)Upper Only, (2)Lower Only, (3)Upper and Lower \n";
cin>>part;
switch(part){
case 1:
case 2:
waterLevel= 0.5;
break;
case 3:
waterLevel = 1;
break;
}
if (doorSensor == 0){
do{
cout<<"Press (S) to Start,and close the Door."<<endl;
cin>>startPause;
cout<<"LED is On\n";
while(waterLevelSensor != waterLevel){
waterLevelSensor++;
}
while(tempSensor != temp){
tempSensor++;
}
cout<<"Washing Operation Started! Time Left:"<<timeToWash<<endl;
cout<<"Washing with Soap Operation Started!\n";
timeToWash = timeToWash / 2 ;
cout<<"Rinsing Operation Started! Time Left:"<<timeToWash<<endl;
timeToWash = timeToWash / 2 ;
cout<<"Drying Operation Started! Time Left:"<<timeToWash<<endl;
timeToWash = 0 ;
startPause = 'P';
}while((startPause == 's') || (startPause =='S'));
}
cout<<"End!\nLED is Off";
return 0;
}
void manualMode(){
cout<<"Enter Temperature: \n";
cin>>temp;
cout<<"Enter Time to wash: \n";
cin>>timeToWash;
cout<<"Choose Operation: (1)Water Only, (2)Water and Soap, (3)Rinse, (4)Dry, (5)All\n";
cin>>operation;
}
void defaultMode(){
int whatToWash;
cout<<"Choose what to Wash: (1)Cups, (2)Plates, (3)Pots";
cin>>whatToWash;
switch(whatToWash){
case 1:
temp = 30;
timeToWash = 3;
break;
case 2:
temp = 40;
timeToWash = 3;
break;
case 3:
temp = 60;
timeToWash = 3;
break;
}
}发布于 2015-01-31 22:11:55
我会对C++的总体改进提出一些建议(我对嵌入式系统不熟悉)。
确保在代码中使用统一的缩进,以使其更具可读性。(例如,do-while循环,主方法中的开关块应该与开始时的声明处于同一级别。)
很好,手动模式和默认模式是两个独立的功能。分解代码可以使人更容易阅读。我还会将其他一些部分导出为单独的功能,特别是主周期。(注:这是一般原则。在嵌入式系统中,可能还有一些其他的考虑因素,我不知道,例如,代码应该尽可能快,而这个建议并不适用。请考虑这个问题。)
我会显式地将每个变量初始化为某些默认值(例如0),即使以后肯定会初始化它。通过这种方式,您肯定可以防止未定义的行为(例如,如果代码稍后被修改,并且在变量不再初始化的情况下引入路径)。
在用于洗涤循环的do-while循环中,读取startPause,但在循环结束时,将其设置为常量值(与已读取的内容无关)。所以这个循环只运行一次。我认为,要么应该删除整个逻辑,要么以循环依赖于输入值的方式进行改进。
在更多的地方,用户需要输入,但从来不检查输入是否在允许值的范围内。在生产系统中,这将是必须的,但在您的情况下,我会澄清是否需要这样做。
发布于 2017-06-20 07:43:41
我发现
int mode=0, part=3, waterLevel;和
switch(part){
case 1:
case 2:
waterLevel=0.5;
break;这意味着当用户选择"1/2负载“时,机器将尝试在没有任何水(如int(0.5)==0)的情况下进行清洗。虽然环保,因为低的水(和暖气)消耗,我不满意的清洁效果。
https://codereview.stackexchange.com/questions/79203
复制相似问题