Why the elseif condition doesn't work?
15 ビュー (過去 30 日間)
古いコメントを表示
i = 1:2071
if (dat(2)==0)&&(dat(3)==0)&&(dat(4)==0)&&(dat(5)==0)
fprintf(fileID,'No cloud');
elseif((dat(2)==0)&&(dat(3)==0)&&(dat(4)==0)&&(dat(5)==1))
fprintf(fileID,'Cirrus');
elseif((dat(2)==0)&&(dat(3)==0)&&(dat(4)==1)&&(dat(5)==0))
fprintf(fileID,'Al_str');
elseif((dat(2)==0)&&(dat(3)==0)&&(dat(4)==1)&&(dat(5)==1))
fprintf(fileID,'Al_cum');
elseif((dat(2)==0)&&(dat(3)==1)&&(dat(4)==0)&&(dat(5)==0))
fprintf(fileID,'St');
elseif((dat(2)==0)&&(dat(3)==1)&&(dat(4)==0)&&(dat(5)==1))
fprintf(fileID,'Sc');
elseif((dat(2)==0)&&(dat(3)==1)&&(dat(4)==1)&&(dat(5)==0))
fprintf(fileID,'Cum');
elseif((dat(2)==0)&&(dat(3)==1)&&(dat(4)==1)&&(dat(5)==1))
fprintf(fileID,'Ns');
else ((dat(2)==1)&&(dat(3)==0)&&(dat(4)==0)&&(dat(5)==0));
fprintf(fileID,'DC \n');
end
end
5 件のコメント
David Fletcher
2018 年 3 月 8 日
Personally, I'd turn dat(2) - dat(5) into a 4 bit number and use a switch statement instead. All those if, elseif, else statements are a bit of a nightmare
回答 (1 件)
Jan
2018 年 3 月 8 日
While Abraham has posted a useful explanation already, I suggest a simplification of the code in addition:
v = dat(2:5) * [8, 4, 2, 1].';
switch v
case 0
fprintf(fileID,'No cloud');
case 1
fprintf(fileID,'Cirrus');
case 2
fprintf(fileID,'Al_str');
case 3
fprintf(fileID,'Al_cum');
case 4
fprintf(fileID,'St');
case 5
fprintf(fileID,'Sc');
case 6
fprintf(fileID,'Cum');
case 7
fprintf(fileID,'Ns');
otherwise % Or: case 8 ???
fprintf(fileID,'DC \n');
end
By the way: Your last condition was:
else ((dat(2)==1)&&(dat(3)==0)&&(dat(4)==0)&&(dat(5)==0));
This is equivalent to
else
Maybe you meant:
elseif ((dat(2)==1)&&(dat(3)==0)&&(dat(4)==0)&&(dat(5)==0))
? This is a remarkable difference, because else cond evaluates the expression cond, but it has no effect at all.
An even short code:
v = min(8, dat(2:5) * [8, 4, 2, 1].');
p = {'No cloud', 'Cirrus', 'Al_str', 'Al_cum', 'St', 'Sc', 'Cum', 'Ns', 'DC \n'};
fprintf(fileID, p{v + 1});
3 件のコメント
Rik
2018 年 3 月 9 日
You should either explain what is different in your output as expected, or provide an example of an input with the correct output.
Jan
2018 年 3 月 9 日
@medha spd: Please consider Rik's comment. I cannot adjust the code to the results you expect, if I do not know, what these expectations are.
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!