回 帖 发 新 帖 刷新版面

主题:输入待排序数记录问题,很容易,看看问题在哪里!

#include<stdio.h>
#define MAXSIZE 10
typedef int KeyType;
typedef struct
{
  KeyType key;
}RecType;
typedef struct
{
  RecType r[MAXSIZE];
  int length;
}Sortlist;

main()
{
  Sortlist S;
  int x,i=1;
  S.length=0;
  printf("please input numbers(int),space out by 'space',exit for '0':\n");
  scanf("%d",&x);
  while(x!=0&&i<=MAXSIZE)
  {
    S.r[i].key=x;
    S.length++;
    i++;
    scanf("%d",&x);
  }
  printf("\n");
  printf("---------------------------\n");
  printf("1--Direct Sort\n");
  printf("2--Simple Change Sort\n");
  printf("3--Quick Sort\n");
  printf("4--Choose Sort\n");
  printf("5--Stack Sort\n");
  printf("6--Two Path Sort\n");
  printf("---------------------------\n");
  printf("\n");
  printf("The numbers are:");
  for(i=1;i<=S.length;i++)
  {
    printf("%4d",S.r[i].key);
  }
  printf("\n");
  printf("length=%d",S.length);
  printf("\n");
  getch();
}


这是我准备写个综合排序实验前赋值的一段程序,问题严重,不知道怎么搞的,输入9个一下的数,检测打印出来是对的,输入9个以上的数就有问题了,我的表长是10,就是限制在10个数以内,可是输入过头以后,前面的数据都出问题了,有时间帮忙运行看看,问题在什么地方,我感觉理论上应该没有什么问题的!

回复列表 (共3个回复)

沙发

我修改了一下发现一个问题!
#include<stdio.h>
#define MAXSIZE 10
typedef int KeyType;
typedef struct
{
  KeyType key;
}RecType;
typedef struct
{
  RecType r[MAXSIZE+1];
  int length;
}Sortlist;

main()
{
  Sortlist S;
  int x,i=1;
  S.length=0;
  printf("please input numbers(int),space out by 'space',exit for '0':\n");
  scanf("%d",&x);
  while(x!=0&&i<=MAXSIZE)
  {
    S.r[i].key=x;
    S.length++;
    i++;
    scanf("%d",&x);
  }
  printf("\n");
  printf("---------------------------\n");
  printf("1--Direct Sort\n");
  printf("2--Simple Change Sort\n");
  printf("3--Quick Sort\n");
  printf("4--Choose Sort\n");
  printf("5--Stack Sort\n");
  printf("6--Two Path Sort\n");
  printf("---------------------------\n");
  printf("\n");
  printf("The numbers are:");
  for(i=1;i<=S.length;i++)
  {
    printf("%4d",S.r[i].key);
  }
  printf("\n");
  printf("length=%d",S.length);
  printf("\n");
  getch();
}




这个问题是
#define MAXSIZE 10

r[MAXSIZE]中,数组不是从0开始吗?
这里按道理说把0除开,从1开始可以存储10个数啊!如果从0开始r[MAXSIZE]应该可以存储11个数是吧?
为什么我MAXSIZE+1就对了呢?就可以存储从1开始的10个数,输入就没有问题了,而用10就不行?
这是为什么啊?

板凳

错了
数组存储的范围是:
对于数组a[n]有效的下标范围是a[0]..a[n-1]共n个元素
你对数组的理解是错的
“按道理说”按的不是c的道理。

3 楼

可能是语言学混了吧~~~哎~~~这个问题严重,幸亏及时发现了!不然我会一错再错!!!

我来回复

您尚未登录,请登录后再回复。点此登录或注册