本例错误在于数组的长度不能是变量.
程序目的:输入一个数组的元素数,然后给每个元素赋值,再给出一个值作为关键词,查出数组内是否有元素等于这个值。
代码如下:
1 #include <stdio.h> 2 int main() 3 { 4 int n,m,x,b; 5 int array[n]; 6 7 //本段代码用来获取元素个数 8 do 9 { 10 printf(" 请输入数组元素的个数: "); 11 scanf("%d",&n); 12 if(n<=0) 13 { 14 printf(" 请正确输入数组元素的个数!"); 15 } 16 }while(n<=0); 17 18 //用来给每个元素赋值 19 for(m=0;m<n;m++) 20 { 21 do 22 { 23 printf(" 请输入元素%d的值: ",m+1); 24 scanf("%d",&array[m]); 25 if(array[m]<=0) 26 { 27 printf(" 请正确输入元素%d的值!",m+1); 28 } 29 }while(array[m]<=0); 30 } 31 32 //获取作为关键词的值 33 do 34 { 35 printf(" 请输入你要查询的值: "); 36 scanf("%d",&x); 37 if(x<=0) 38 { 39 printf(" 请正确输入你要查询的值!"); 40 } 41 }while(x<=0); 42 43 //进行查找 44 for(m=0;m<n;m++) 45 { 46 if(x==array[m]) 47 { 48 printf(" 要查找的是第%d个元素.",m+1); 49 b=1; 50 } 51 } 52 53 //如果没有找到,输出本句 54 if(b!=1) 55 { 56 printf(" 查无此数."); 57 } 58 59 return 0; 60 }
正常运行结果是:
请输入数组元素的个数: 6 请输入元素1的值: 1 请输入元素2的值: 2 请输入元素3的值: 3 请输入元素4的值: 4 请输入元素5的值: 5 请输入元素6的值: 6 请输入你要查询的值: 5 要查找的是第5个元素.
但是当元素个数是5,且查询的值是第4个元素的值的时候,结果会出现2个:(经过验证,目前只发现在这个情况会出现bug)
1 请输入数组元素的个数: 5 2 3 请输入元素1的值: 1 4 5 请输入元素2的值: 2 6 7 请输入元素3的值: 3 8 9 请输入元素4的值: 4 10 11 请输入元素5的值: 5 12 13 请输入你要查询的值: 4 14 15 要查找的是第4个元素. 16 要查找的是第5个元素.
本人初学C,恳请路过的熟手可以帮忙解释一下是不是我哪儿写错了。。。谢谢大家的拔刀相助!
后来我在学习其他章节的时候突然想明白了,正确代码如下:
1 #include <stdio.h> 2 #define NUM 5//用来定义数组长度 3 int main() 4 { 5 int m,x,b; 6 int array[NUM]; 7 8 //用来给每个元素赋值 9 for(m=0;m<NUM;m++) 10 { 11 do 12 { 13 printf(" 请输入元素%d的值: ",m+1); 14 scanf("%d",&array[m]); 15 if(array[m]<=0) 16 { 17 printf(" 请正确输入元素%d的值!",m+1); 18 } 19 }while(array[m]<=0); 20 } 21 22 //获取作为关键词的值 23 do 24 { 25 printf(" 请输入你要查询的值: "); 26 scanf("%d",&x); 27 if(x<=0) 28 { 29 printf(" 请正确输入你要查询的值!"); 30 } 31 }while(x<=0); 32 33 //进行查找 34 for(m=0;m<NUM;m++) 35 { 36 if(x==array[m]) 37 { 38 printf(" 要查找的是第%d个元素.",m+1); 39 b=1; 40 } 41 } 42 43 //如果没有找到,输出本句 44 if(b!=1) 45 { 46 printf(" 查无此数."); 47 } 48 49 return 0; 50 }
这样结果就不会有bug了,原来的代码如果输出结果准确, 纯属运气........
请输入元素1的值: 1 请输入元素2的值: 2 请输入元素3的值: 3 请输入元素4的值: 4 请输入元素5的值: 5 请输入你要查询的值: 4 要查找的是第4个元素.