One problem is that there are two conditions to the while loop: one to check on the number and the other to check on the string, but there is no && or operator between these two conditions. It should probably read instead
while (~isempty(choicenum) && choicenum~=1) && strcmpi(choiceStr,'load the data')~=1
which would mean if the choice (as a number) is non-empty and not equal to one AND the choice as a string is not equal to "load the data" then continue looping. But I don't think this is quite what you want.
It may be easier to think of it in the other direction - quit the loop if the user selects a certain number (so choicenum is non-empty and choicenum==x) OR if he/she enters a certain string
((~isempty(choicenum) && choicenum==1) || strcmpi(choiceStr,'load the data')==1)
As the above statement would be true if the user selects one or types in 'load the data' then the while loop would finish. We want to continue the loop so long as this statement is NOT true. So just negate it
while ~((~isempty(choicenum) && choicenum==1) || strcmpi(choiceStr,'load the data')==1)
Since choicenum and choiceStr are used in the condition, they will have to be defined prior to the while loop. And so your code becomes
choiceNum = 0;
choiceStr = '';
exitId = 1;
while ~((~isempty(choiceNum) && choiceNum == exitId) || strcmpi(choiceStr,'load the data')==1)
question = [1:2,6];
for i = question
disp(questionLine{i})
end
choiceStr=input('Enter the word or the number:','s');
choiceNum=str2num(choiceStr);
end
Note the slight changes to your original code - the removal of disp('Enter a valid number or word'), the renaming of choicenum to choiceNum, and the replacing of choiceord with choiceStr.
I suspect you also want to change the exit condition, exitId, to 5 since that is the menu option to exit or quit the loop. The corresponding 'load the data' string would have to change to 'quit'.
Try the above and see what happens!
Best Answer