关于C语言字符数组有关的问题,如何解决?

https://blog.csdn.net/2301_76986990/article/details/132024624?spm=1001.2014.3001.5502
问题详情在这个链接博客里面,如有帮助,不胜感激!!

我猜是因为你在输入字符后,接了一个换行符(enter健)保留在了缓冲区里,然后被scanf读进去了,你试试在scanf后加一个getchar();

缓冲问题

不是恰好是a,因为数组不是所有位都初始化的,可能是某次运行留下来的,其他分析看了一下,没有大问题

代码里都是对数组越界操作,属于未定义行为,未定义行为就是运行结果不确定,所以得到的结果也是不确定的。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/3277701
  • 这篇博客你也可以参考下:c语言:输入两个整形数并打印,如果用户不慎输入了非法字符,那么程序提示“输入数据类型错误”。
  • 您还可以看一下 贺利坚老师的C语言及程序设计初步课程中的 数值数据类型及表示小节, 巩固相关知识点
  • 除此之外, 这篇博客: C语言 【数组的综合练习】中的 好,废话不多说。我们直接上代码! 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

    ​​​​​​​//在一个长度为10的整型数组里面,保存了班级10个学生的考试成绩。要求编写5个函数,分别实现计算考试的总分,最高分,最低分,平均分和考试成绩降序排序。

    #include<stdio.h>

    int main(void)

    {

          int score[10]={67,98,75,63,82,79,81,91,66,84};

           int x,a;

           int y;

          int sum = 0;//学生成绩总和

          int max;//学生成绩的最高分

          int min;//学生成绩的最低分

           max = min = score[0];

          int average = 0;//学生成绩的平均分

         int arr[10];//降序排列后的数组

          

         for(int k = 0;k<10;k++)

         {

             sum +=score[k];

            

             if(score[k]<max) {

                 max=score[k];}

            if(score[k]>min){

               min = score[k];

            }   

         }

    average = sum/10;

    for(x = 0;x<=10;x++)

     for(a = 0;a<=10;a++)

     {

       if(score[x]<score[a])

       { y = score[x];

          score[x]=score[a];

          score[a]=y;

        }

     }

     printf("降序排列后的成绩是:\n");

     for(int k = 0;k<=10;k++)

     { if(score[k]==0)

          continue;

       printf("%d\n",score[k]);

     }

    printf("全班成绩的总分是:%d\n平均成绩是:%d\n最低成绩是:%d\n最高成绩是:%d\n",sum,average,max,min);

    }

    a7cb3857d53d4c51a6558e20e1ff09e6.png

     这段代码先利用循环求出最大值和最小值,我来解释一下为什么要用两个if,因为冒泡排序是从第二个数和后面一个数字比较;如果大于前面这个就和前面这个数交换位置。所以最大值和最小值的数组下标都在score【0】,也就是数组第一个值。这是我们完成的第一个需求。6b769d03116a45e996f6191b0c76534b.gif

     

    bd5e739de1db4333976a1dacd7b1e3c1.png

     这才是我们完整的排序过程。

    下面是运行结果,可以看到我们的数组都按照从小到大的顺序排序好了,那么冒泡排序的任务就完成了。

    2c2f28a157c54e02a4a6254a6d4928de.png

     



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^