ps:把判断语句写成了赋值语句,找了一晚上的问题.....
记得刚开始学c语言的时候,刚开始上手写代码,很多东西都不熟悉,只要一写起来就会出各种问题。当时写一个代码是要求找5个整数中的最大值:
int main()
{
int arr[5] = { 0 };
int i = 0;
for (i = 0; i < 5; i++)
{
scanf("%d", &arr[i]);
}
for (i = 0; i < 5; i++)
{
printf("arr[%d]=%d\n", i, arr[i]);
}
i = 0;
int j = 0;
while (i != 10)
{
if (arr[i] < arr[j])
i++;
if (arr[i] > arr[j])
j++;
if (arr[i] = arr[j])//此处应该是==
i++;
}
printf("max is %d", arr[j]);
return 0;
}
这道题的思路其实挺简单,但是我用了一个较麻烦的办法去解:大概就是给定两个变量,a[i],a[j]比大小,只有当a[i]<a[j]时,j才往后走,不然就是i一直往后走,最后的结果返回a[j]即为最大值。
重点是当时用了3个if去判断,等于说每一个if都会进去判断一边,结果我把arr[i]==arr[j]少写了一个=号,导致运行结果怎么样都不对,当时就纳闷了明明思路是OK的。
错误的运行结果(死循环):
当时还以为是3个if一起用的原因,结果把这个3个if表达的形式写成了if else if的形式
if (arr[i] < arr[j])
i++;
else if (arr[i] > arr[j])
j++;
else
i++;
完美的避开了arr[i]==arr[j],结果发现运行是正确的,当时就拍板肯定是3个if一起用的问题,当时还觉得自己挺聪明的,但是想了想发现3个if逻辑上也没问题啊,甚至怀疑是vs出问题了,想重新下载再安装一遍,因为晚上了也没时间重新安装。
最后各种调试加上死盯着代码看才发现少写了个“=”,当时想给自己一巴掌的冲动都有了,“蠢”到昏头(捂脸哭)。