Why the elseif condition doesn't work?

15 ビュー (過去 30 日間)
medha spd
medha spd 2018 年 3 月 8 日
コメント済み: Jan 2018 年 3 月 9 日
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
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
medha spd
medha spd 2018 年 3 月 9 日
@Jan Simon It was the 1st question that I've asked here.sorry for making it unclear to understand.Will improve :)

サインインしてコメントする。

回答 (1 件)

Jan
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
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
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.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeParallel Computing についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by