2015-01-12 86 views
2

我编写了下面的程序,以便从用户那里得到一个字符串数组,然后对它们进行排序,然后向用户显示排序后的数组。排序杀死程序:MATLAB

但似乎sort函数完全杀死程序。因为第二个msgbox从不出现。

另请注意,如果我在第一次取消inputdlg时出现两个消息框。

strings = {}; 
count = 1; 
while(1) 
    prompt = {strcat('Enter the ', num2str(count), '# String')}; 
    temp = inputdlg(prompt,'Input String',1,{'String'}); 
    if isempty(temp) 
     break 
    end 
    strings{count} = temp; 
    count = count + 1; 
end 
msgbox('Processing....'); 
sorted = sort(strings); % The program stops executing on this point 
msgbox('Operation Completed'); 

那么为什么程序永远不会执行最后一行?谢谢。

+0

你的问题是什么?此外,你应该提供一个完整的可执行示例(即[mcve](http://stackoverflow.com/help/mcve)) – kkuilla

+0

我认为“排序”功能杀死了程序,但我希望它继续工作。换句话说:“为什么第二个msgbox从不显示?”编辑:这是一个可执行的例子,当我在编辑器中运行它时工作正常(除了我提到的问题) – AliLotfi

+0

用该语句更新您的问题。 – kkuilla

回答

4

变量temp是包含输入字符串的1x1单元格。通过分配strings{count} = tempstrings的每个条目都是1x1单元格。如果您查看Workspace中的变量,则可以验证该变量。您只能通过调用

strings{count} = temp{1}; 

经过这样的修改访问输入的字符串时,strings细胞包含字符串,而不是细胞。现在您可以使用sort函数对单元格进行排序,并且您的代码应该按预期工作。

+2

打我吧...只是输入一个类似的答案,请注意,因为字符串被初始化为一个单元格('strings = {};'),那么使用'strings(count)= temp;'是另一种选择 – RTL