• 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个元素.
  • 相关阅读:
    Lining.js
    stdmap 用 at() 取值,如果 key 不存在,不好意思,程序崩溃。QMap 用 value()取值,如果 key 不存在,不会崩溃,你还可以指定默认值
    任正非:美国通信产业失败,不要归罪于华为的崛起(创业过程:前端替客户考虑,后端及时回款建立信誉)
    草根站长赚不到钱的六大原因(失败的理由却只有一个,那就是你不够努力)
    记一次构建SaaS平台项目失败后的反思(收集的客户需求太少,且没有区分重点,闭门造车。技术演变要渐进)
    Qt源码分析之QObject
    Mongodb索引用B树,而Mysql用B+树
    开源工作流elsa-core
    ExpressionTree实现JSON解析器
    分析Ajax爬取
  • 原文地址:https://www.cnblogs.com/alpharobert/p/5347097.html
Copyright © 2020-2023  润新知