在C中如何通过头文件使用函数在数组中输入/显示数据?[已关闭]

u4vypkhs  于 2023-03-01  发布在  其他
关注(0)|答案(1)|浏览(143)

7天前关闭。
Improve this question
我创建了两个文件,分别用于显示和读取数据,并将它们包含在用于排序的主文件中,但当我执行主程序时,数据没有显示,而是调用了函数。

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

#include "arrdisp.c"
#include "arrread.c"
void selsort(int arr[]);
int random(int min, int max);
int n;
void main() {
  int a[10], i;
  char ch;
  printf("Do you want to insert student marks manually?(y/n):");
  scanf("%c", &ch);
  if (ch == 'y') {
    read(a, n);

    for (i = 0; i < n; i++) printf("%d, ", a[i]);

  } else {
    printf("How many random marks do you want to insert:");
    scanf("%d", &n);

    for (i = 0; i < n; i++) a[i] = random(0, 100);
  }

  printf("before sorting:\n");
  disp(a, n);
  printf("\nAfter sorting:\n");
  selsort(a);
  disp(a, n);

  printf("Array elements");

  for (i = 0; i < n; i++) printf("%d, ", a[i]);
}
int random(int min, int max) {
  return min + rand() / (RAND_MAX / (max - min + 1) + 1);
}

void swap(int *xp, int *yp) {
  int temp = *xp;
  *xp = *yp;
  *yp = temp;
}
void selsort(int arr[]) {
  int i, j, min_idx;

  for (i = 0; i < n - 1; i++) {
    min_idx = i;
    for (j = i + 1; j < n; j++)
      if (arr[j] < arr[min_idx]) min_idx = j;

    if (min_idx != i) swap(&arr[min_idx], &arr[i]);
  }
}

有人能解释一下出了什么问题吗?
我试着让数组成为外部变量,但在主程序中出现了一些错误,说数组是未定义的,所以我试着在同一个程序中定义普通函数,但仍然有相同的输出,所以我不认为这是头文件的问题,但我仍然一无所知。

wn9m85ua

wn9m85ua1#

你没有初始化n,所以你的显示循环不会工作,因为一个没有初始化的int变量会得到零。
我看到您初始化n的唯一位置是在else语句中,如果用户选择y,则不会访问该语句。
所以我的建议是让用户输入“n”

printf("Do you want to insert student marks manually?(y/n):");
    scanf("%c",&ch);
    if(ch=='y')
    {
        printf("How many students:");
        scanf("%d",&n);
        read(a,n);

        for (i=0;i<n;i++)
            printf("%d, ",a[i]);
    }

最终建议:
使用制表符或空格来缩进作用域代码块,以便您可以立即区分它们。

相关问题