假设我们在MATLAB中有这个#include <stdio.h>
#include <stdlib.h>
char fillcards(void)
{
int i,j;
srand(8490);
char P[1001][16];
for(i=0; i<1000; i++)
{
for(j=0; j<15; j++)
{
char randomletter="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[rand() % 36];
P[i][j]=randomletter;
}
}
return P;
}
int main(int argc, char *argv[])
{
... // char P[.][.]=fillcards
printf("%s\n", P[1]); // Just to test
system("PAUSE");
return 0;
}
语句:
if
是否可以缩短此if rn == 1 || rn == 2 || rn == 3 || rn == 4 || rn == 5
%% Some calculations
elseif rn == 6 || rn == 7 || rn == 8 || rn == 9 || rn == 10
%% Some calculations
end
声明?
答案 0 :(得分:7)
您可以使用any
检查值向量来执行此操作:
if any(rn == 1:5)
%% Some calculations
else if any(rn == 6:10)
%% Some calculations
end
答案 1 :(得分:3)
对于性能,使用||
(允许短路)优于以下内容,但如果您真的想避免写出额外的OR
子句,则可以使用{{3} }
if ismember(rn, 1:5)
%% Some calculations
elseif ismember(rn, 6:10)
%% Some calculations
end
如果true
是数组的成员(rn
和1:5
,则返回5:10
),否则返回false
。
另一种选择是使用ismember,如下所示
if find(1:5 == rn)
%% Some calculations
elseif find(6:10 == rn)
%% Some calculations
end
由于您检查了不同值向量中的相等性,find
将返回单个索引>= 1
,其将评估为true
,或者返回一个空矩阵,它将评估为false
。
如果你知道rn
是一个整数,你自然可以检查它是否在上面的范围表示中
if rn >= 1 && rn <= 5
%% Some calculations
elseif rn >= 6 && rn <= 10
%% Some calculations
end