高手帮忙看下为什么会把错误的输入打印出来呢?
#define M 10#include<stdio.h>
void main()
{
int n,d,z,x,g,i,j,t,e;
int a;
x=0;
d=M-1;
g=0;
printf("please input ten a numbers:\n");
for(i=0;i<10;i++)
{
while(scanf("%d",&a)!=1)
{
printf("input error!!\nplease input again\n");
scanf("%d",&a);
getchar();
}
}
printf("\n");
for(j=0;j<10;j++)
{
for(i=0;i<10-j;i++)
{
if(a>a)
{
t=a;
a=a;
a=t;
}
}
}
for(i=0;i<10;i++)
{
printf("%5d",a);
}
printf("\n");
printf("please input a number:\n");
while(scanf("%d",&n)!=1)
{
printf("input error!!\nplease input again");
scanf("%d",&n);
getchar();
}
printf("\n");
while(x<=d)
{
z=(x+d)/2;
if(n==a)
{
g=1;
break;
}
else if(n>a)
{
x=z+1;
}
else
{
d=z-1;
}
}
if(g==1)
printf("zhe ge shu %d de xia biao shi:%d\n",n,z);
else
{
printf("zhe ge shu bu cun zai\n");
}
}
我输入10个数字,错误的为什么会跑到数组里面去? 拜托来为可以帮帮我 冒泡排序算法那块导致数组溢出。
修改为:
for(j=0;j<M-1;j++)
{
for(i=0;i<M-1-j;i++)
{
if(a>a)
{
t=a;
a=a;
a=t;
}
}
}
小甲鱼 发表于 2014-4-13 13:31 static/image/common/back.gif
冒泡排序算法那块导致数组溢出。
修改为:
for(i=0;i<M-1-j;i++)为什么要M-1啊?
之前没有-1也可以的啊? 可乐88989 发表于 2014-4-13 13:51 static/image/common/back.gif
for(i=0;i
跟着程序走一次你就会发现不减1会导致跟数组外的元素进行交换了。
其实冒泡排序规范的写法还是这样好:
#include <stdio.h>
#define LENGTH 8
void main() {
int i, j, tmp, number = {95, 45, 15, 78, 84, 51, 24, 12};
for (i = 0; i < LENGTH; i++) {
for (j = LENGTH - 1; j > i; j--) {
if (number < number) {
tmp = number;
number =number;
number = tmp;
}
}
}
for (i = 0; i < LENGTH; i++) {
printf("%d ", number);
}
printf("\n");
}
小甲鱼 发表于 2014-4-13 13:31 static/image/common/back.gif
冒泡排序算法那块导致数组溢出。
修改为:
对这个溢出还不是很理解? 可乐88989 发表于 2014-4-13 14:35 static/image/common/back.gif
对这个溢出还不是很理解?
修正下,这里用“溢出”的说法并不完全正确。
你看下这个是没修改过的部分代码:for(j=0;j<10;j++)
{
for(i=0;i<10-j;i++)
{
if(a>a)
{
t=a;
a=a;
a=t;
}
}
}当 j = 0,i = 9的时候,比较 if(a>a)就会出现数组的访问越界,a = a已经超出数组的边界了吧?把边界里的数据替换进来,所以就会出现奇怪的数据了。
页:
[1]