为MIPS汇编语言改进以下代码

时间:2019-04-14 23:40:32

标签: c mips

my程序的目的是根据用户输入对数字进行排序。一切工作正常,直到用户想要输入6个以上的数据(inp = 5),而且我不确定为什么会这样。您可以查看一下并让我知道其背后的原因吗?

#include <stdio.h>
#include <stdlib.h>

int size =0;

void ascSort(int *a, int size, int temp) {
  for(int i=1; i< size; i++){
      for(int j=i; j>0; j--){
        if(a[j-1]>a[j]){
          temp = a[j-1];
          a[j-1] = a[j];
          a[j] = temp;
        }
      }
    }
}

void descSort(int *a, int size, int temp) {
  for(int i=1; i< size; i++){
      for(int j=i; j>0; j--){
        if(a[j-1]<a[j]){
          temp = a[j-1];
          a[j-1] = a[j];
          a[j] = temp;
        }
      }
    }
}
int main(){
  char inpChar, isContinue='y';
  int inp, temp=0;
  int * a = malloc(0 * sizeof(*a));

  do {
    printf("How many numbers would you like to sort?\n");
    fflush(stdin);
    scanf("%d", &inp);
    size = inp;

    printf("%d\n", size);

    a = realloc(a, size * sizeof(*a));

    for(int i=0; i<size; i++){
      //Below, I am printing 'size' for debugging purposes
        printf("Type %d more numbers to sort ---- '%d'\n", inp, size);
        fflush(stdin);
        scanf("%d", &a[i]);
        inp--;
    }
    printf("Please input a for ascending order and d for descending order\n");
    fflush(stdin);
    scanf(" %c", &inpChar);

    switch (inpChar) {
      case 'a':
        ascSort(a, size, temp);
        break;
      case 'd':
        descSort(a, size, temp);
        break;
      default: printf("Invalid character\n");
    }

    printf("Sorted Array: \n" );
    for(int i=0; i<size; i++){
      printf("%d\n", a[i]);
    }
    printf("Do you want to repeat? Type y/n\n");
    fflush(stdin);
    scanf(" %c", &isContinue);
  } while(isContinue != 'n');

}

在“ inp”值增加到6后,“ inp”值显示完全没有预期的垃圾值。

注意,代码已更新并可以正常使用。现在,我的问题是如何改进此代码,以便可以将此代码转换为MIPS汇编语言?谢谢。

0 个答案:

没有答案