我正在写这段代码:
#includeint main() { int t[50],n,i,test=1; printf("Donner la Taille N du tableau :");scanf("%d",&n); for(i=0;i t[i+1]){test=0;break;}; }; return test != 0); }
如果数组是递增的,它应该返回1,但它总是返回1
for(i=0;i在scanf运行之前增加i ...相反
for(i=0;i该对环
for(INIT ; COND ; INCREMENT) ACTION;相当于
INIT; while (COND) { ACTION; INCREMENT; }在你的程序中,实际操作是INCREMENT的一部分,并在之后完成
i++
(从左到右评估和执行逗号分隔的语句),0
跳过了值,而且t[n]
写入了n
逻辑超出界限(因为它不是一个问题,而n
<= 49).请注意,INIT和INCREMENT是约定,因为您可以在那里做很多既不是初始化也不是增量的东西! - 就像你实际做的那样
下面是一个只使用一个循环,没有数组和更少变量的版本,后面是解释
#include#include int main(){ int n,v,previous = INT_MIN; // INT_MIN: minimal int value printf("Donner N le nombre de valeurs :"); scanf("%d",&n); while (n-- > 0) { scanf("%d", &v); if (v < previous) return 0; previous = v; } return 1; } 说明
previous
被赋予最低可能的整数值
while (n-- > 0)
确保n最初> 0,将循环n次读取一个值
v
,如果v < previous
这意味着序列没有提升直接返回1或0
邦勇气 :-)