在c语言中使用for循环输入数组报错

img


在c语言中使用for循环输入数组报错,但是不知道原因,是突然出现的状况

img


在敲入5个数之后没反应,要随便打几个字母就有了,

img

先考虑一下这个问题:“123456”是6个1位数,还是1个6位数?
程序不能有歧义,所以多个数字要用分隔符分开,才能区分上述两种情况。c语言中,如果不指定分隔符,一般用空格、制表或者换行作为分隔符。
你只输入了一个数字“123456”,还需要再输入4个数字,但是输入了字母,导致后面4个数字输入失败并跳过。于是第一个“123456”正常输出,后面4个数字都是奇怪的值。
你可以这样输入:“1 2 3 4 5”(用空格作为分隔符)

img

img

输入时,输入5个的数字之间用空格间隔,如:12345 2468 3721 1 23

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/670514
  • 这篇博客也不错, 你可以看下【C语言】帮你解决c语言中数组的问题
  • 除此之外, 这篇博客: 冒泡排序和快速排序(C语言实现)中的 快速排序算法通过多次比较和交换来实现排序,其排序流程如下: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • (1)首先设定一个分界值,通过该分界值将数组分成左右两部分。

    (2)将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于或等于分界值,而右边部分中各元素都大于或等于分界值。

    (3)然后,左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。

    (4)重复上述过程,可以看出,这是一个递归定义。通过递归将左侧部分排好序后,再递归排好右侧部分的顺序。当左、右两个部分各数据排序完成后,整个数组的排序也就完成了。

    假设一开始序列a[i]是:5,3,7,6,4,1,0,2,9,10,8。

    此时,key=5,low=1,high=11,从后往前找,第一个比5小的数是[8]=2,因此序列为:2,3,7,6,4,1,0,5,9,10,8。

    此时low=1,high=8,从前往后找,第一个比5大的数是a[3]=7,因此序列为:2,3,5,6,4,1,0,7,9,10,8。

    此时,low=3,high=8,从第8位往前找,第一个比5小的数是x[7]=0,因此:2,3,0,6,4,1,5,7,9,10,8。

    此时,low=3,high=7,从第3位往后找,第一个比5大的数是a[4]=6,因此:2,3,0,5,4,1,6,7,9,10,8。

    此时,low=4,high=7,从第7位往前找,第一个比5小的数是a[6]=1,因此:2,3,0,1,4,5,6,7,9,10,8。

    此时,low=4,high=6,从第4位往后找,直到第6位才有比5大的数,这时,low=high=6,key成为一条分界线,它之前的数都比它小,之后的数都比它大,对于前后两部分数,可以采用同样的方法来排序.