Why the elseif condition doesn't work?

15 Ansichten (letzte 30 Tage)
medha spd
medha spd am 8 Mär. 2018
Kommentiert: Jan am 9 Mär. 2018
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 Kommentare
David Fletcher
David Fletcher am 8 Mär. 2018
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 am 9 Mär. 2018
@Jan Simon It was the 1st question that I've asked here.sorry for making it unclear to understand.Will improve :)

Melden Sie sich an, um zu kommentieren.

Antworten (1)

Jan
Jan am 8 Mär. 2018
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 Kommentare
Rik
Rik am 9 Mär. 2018
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 am 9 Mär. 2018
@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.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Parallel Computing finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by