C语言一个小程序的bug疑问 数组相关[已解决]

本例错误在于数组的长度不能是变量.

程序目的:输入一个数组的元素数,然后给每个元素赋值,再给出一个值作为关键词,查出数组内是否有元素等于这个值。

代码如下:

 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个元素.
原文地址:https://www.cnblogs.com/alpharobert/p/5347097.html