1

注意:我在 Matlab 中编程,但这是一个普遍的问题,所以大概任何伪代码都应该回答我的问题。我想知道,如何根据后续 if 语句的结果返回 if 语句的前一个块?

这是我的动机:我有一个程序可以创建一个要写入的新文件夹,如果该文件夹已经存在,我希望程序在覆盖它之前先询问。如果用户说是,则文件夹被覆盖,如果他们说不是,程序终止而不覆盖。如果用户说的不是是或否,我想回到询问是否覆盖的控制块。否则,如果用户在是/否部分犯了错误,他们必须重新运行程序才能保存他们的工作。这种向后控制流在带有 continue 语句的 for 循环中很容易实现,但 continue 语句在 if 语句中无效。

这是我现在拥有的一些示例代码:

 confirm = input('Warning: That filepath already exists! Continuing may overwrite 
data saved there. Continue(Y/N)?', 's');

        if strcmpi(confirm, 'Y')                        %Compare to Y, case insensitive
        elseif strcmpi(confirm,'N')                 %Compare to N, case insensitive
                display('Program terminated without saving data');
                return;
        else
               display('Error: Enter Y or N');         %User error, end program        
               return;
        end

如果他们输入 Y(或 y),则循环不执行任何操作,如果他们输入 N(或 n),则程序结束,如果他们输入其他任何内容,则会出错并且程序也结束。我不想结束,而是想回到输入步骤并重新定义“确认”。是否可以像这样“倒带”或中断 if 语句?

4

1 回答 1

3

不需要任何花哨的东西:

confirm = input('Warning: That filepath already exists! Continuing may overwrite
data saved there. Continue(Y/N)?', 's');
inputY = 0; % False to start 
inputN = 0;
while ~inputY && ~inputN
    inputN = strcmpi(confirm, 'N');
    if (inputN) 
        display('Program terminated without saving data');
        return;
    end

    inputY = strcmpi(confirm, 'Y');
    if (inputY)
        % Do whatever

    end

    confirm = input('Please enter (Y/N)', 's');
end
enter code here
于 2013-08-13T14:44:40.103 回答