这是我的while循环编码,我想要的是让程序询问用户是否要重新运行程序。应该输入(Y / N)。但是每次运行我的程序时,它都会不断运行main()函数,即使我输入了我的ans变量的N或n字符。任何帮助将不胜感激。
for i = 1:9
exp = ['P\s*', num2str(i), '\s*(\S*)\s*(\S*)\s*(\S*)'];
parts = regexp(txt,exp,'tokens')
P{i} = [reshape(str2double([parts{:}]),3,[])]';
end
答案 0 :(得分:2)
在你的while语句中," ||"意味着"或"。只要其中一个条件为真,while语句就会继续运行。你需要使用"和"声明,"&&"。
答案 1 :(得分:1)
此条件(ans !='N')||(ans !='n')
始终为true
。非ans
中的N
不是ans
或n
。一方总是true
。如果while (ans !='N')&&(ans !='n')
等于ans
或N
等于ans
,则将其更改为n
,然后您的循环终止。
注意A || B
与!(!A && !B)
相同。
答案 2 :(得分:0)
int askAgain() {
do {
// Do your work
// But never call main(), people will laugh
cin>>ans;
} while((ans !='N') && (ans !='n'));
return 0;
}
答案 3 :(得分:0)
有更好的方法来完成你想要做的事情。即使有可能使它与return main()一起使用,但效率非常低。
在用户输入密钥(本例中为“N”)之前运行循环的一种方法是:
int main()
{
char ans = '?';
while (ans != 'N' && ans != 'n')
{
cin >> ans;
}
return 0;
}
目的是在用户不符合条件时不断提示用户输入值。我还将'ans'设置为值'?'所以在循环的第一次运行时它不会遇到错误。您还可以将其转换为:do-while循环并删除初始化以完成相同的操作。
希望能为您解释得足够。