注意scanf()函数的使用!!!
下午写到有序序列插入一个数的时候,由于自己的问题在这卡了好久好久,后来拿到编译器里去调试了半天才发现到底那里写错了。根据题目的意思,输入个数、此个数的有序增长的数据序列,然后再增加一个数使得正常仍然呈增长趋势。
首先拿到这个题目我想的是既然是不固定的长度,那么我定义一个固定的数组的不方便的,那我就用malloc()好了,申请的空间大小多一个类型长度就可以,写完申请和释放,然后就写插入的判断,一开始写的时候准备直接插入,然后想着好像不是很现实,还是得移位,那么老老实实移位插入吧,这时就发现移位的时候找到插入位置一次性更改完成是有可能会出现数组下标越界的情况:
p[i + 1] = p[i + 2] ,因为这里我只多申请了一个空间,最后的i+2是会越界的,那么我想着定义临时参数存放,然后依次修改参数,将哨兵参数当中间件,找到插入是位置之后,依次将后面的数赋值到插入的参数上,用这个参数去跟后面的p[i]做比较(ps:此后肯定是一一交换的),然后生成的数列后还有一个空间就是放最大的数啦。
写到这里还是清晰的,结果一跑出来发现数据不对啊,丢了一个数,多了个 1 ,这真是让我百思不得其解,分析了半天没想到这个1是那里来的,不行只能调试一下,前面都正常并且都能正常的进行下去,直到发现我输入的数显示的是 1 发现不对,一看我的代码
int ret = scanf("%d",&ret); 这里不管我输入的是什么ret的值恒定为1,因为在这里ret收到的不是键盘输入的数据,而是sacnf函数的返回值,这个返回值就是1,所以将这个语句改写为定义和赋值两个语句就能成功运行啦。
只能说真的很菜,还得多练。。。