VS 2010中,语法错误 : 缺少“;”(在“类型”的前面)

#include<stdio.h>
#include<stdlib.h>
#define N 100
void Init(int arr[], int n);
void Sort_bul(int arr[], int n);
void Sort_sel(int arr[], int n);
void Output(int arr[], int n);

main()
{
int i;
int n;
int arr[N];

Init(arr,N);
Output(arr, N);

printf("请选择排序方式:1.选择排法 2.冒泡排序法");
scanf("%d", &n);
if (n == 1)
{
    Sort_sel(arr,N);
    Output(arr,N);
}
if(n==2)
{
    Sort_bul(arr,N);
    Output(arr,N);
}
return 0;

}
//赋值数组
void Init(int arr[], int n)
{

int i;
int n;
for (int i = 0;i < n;i++)
{
    arr[i] = rand() % 100; //取模运算,限定随机数范围
}

}

//冒泡排序
void Sort_bul(int arr[], int n)
{
int i;
int j;
int temp;
int n;
//外层循环:总排序轮数=元素个数-1
for (i = 0;i < n- 1;i++)
{
//内层循环:每轮对比次数=元素个数-当前轮数-1
for (j = 0;j < n - i;j++)
{
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}

//选择排序
void Sort_sel(int arr[], int n)
{
int i;
int j;
int temp;
int n;
//外层循环:总排序轮数=元素个数-1
for (i = 0;i <n - 1;i++)
{
//内层循环:每轮对比次数=元素个数-1
for (j = 0;j < n - i;j++)
{
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}

//输出语句
void Output(int arr[], int n)
{
int i;
int n;
for (int i = 0;i < n;i++)
{
printf("%5d", arr[i]);
if ((i + 1) % 20 == 0) //二十个一组
{
printf("\n");
}
}
}
问题出在哪呢?

你每个函数在函数入参定义了int n,然后函数内部又定义了int n,将函数内部定义的int n注释掉就没问题了。

(1)函数的n重定义,去掉函数里的int n就行
(2)两个排序算法都有错误,已经改正
正确代码:

#include<stdio.h>
#include<stdlib.h>
#define N 100
void Init(int arr[], int n);
void Sort_bul(int arr[], int n);
void Sort_sel(int arr[], int n);
void Output(int arr[], int n);

main()
{
    int i;
    int n;
    int arr[N];

    Init(arr, N);
    Output(arr, N);

    printf("请选择排序方式:1.选择排法 2.冒泡排序法");
    scanf("%d", &n);
    if (n == 1)
    {
        Sort_sel(arr, N);
        Output(arr, N);
    }
    if (n == 2)
    {
        Sort_bul(arr, N);
        Output(arr, N);
    }
    return 0;
}
//赋值数组
void Init(int arr[], int n)
{
    int i;
    for (int i = 0; i < n; i++)
    {
        arr[i] = rand() % 100; //取模运算,限定随机数范围
    }
}

//冒泡排序
void Sort_bul(int arr[], int n)
{
    int i;
    int j;
    int temp;
    //外层循环:总排序轮数=元素个数-1
    for (i = 0; i < n - 1; i++)
    {
        //内层循环:每轮对比次数=元素个数-当前轮数-1
        for (j = 0; j < n -1- i; j++)
        {
            if (arr[j] > arr[j + 1])
            {
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

//选择排序
void Sort_sel(int arr[], int n)
{
    int i;
    int j;
    int temp;
    //外层循环:总排序轮数=元素个数-1
    for (i = 0; i < n - 1; i++)
    {
        //内层循环:每轮对比次数=元素个数-1
        for (j = i+1; j < n; j++)
        {
            if (arr[i] > arr[j])
            {
                int temp = arr[j];
                arr[j] = arr[i];
                arr[i] = temp;
            }
        }
    }
}

//输出语句
void Output(int arr[], int n)
{
    int i;
    for (int i = 0; i < n; i++)
    {
        printf("%5d", arr[i]);
        if ((i + 1) % 20 == 0) //二十个一组
        {
            printf("\n");
        }
    }
}

输出:

img

说你分号;附近有错,找一下报错行号附近的;分号相关代码逐步排查

  • 先把报错的位置发出来,好定位。
  • 代码里不尽量不要使用重名的定义,如 int i, for (int i

#include<stdio.h>
#include<stdlib.h>
#define N 100
void Init(int arr[], int n);
void Sort_bul(int arr[], int n);
void Sort_sel(int arr[], int n);
void Output(int arr[], int n);
 
main(){
int n;
int arr[N]={0};
 
Init(arr,N);
Output(arr, N);
 
printf("请选择排序方式:1.选择排法 2.冒泡排序法\n");
scanf("%d", &n);
if (n == 1)
{
    Sort_sel(arr,N);
    Output(arr,N);
    system("pause");
}
if(n == 2)
{
    Sort_bul(arr,N);
    Output(arr,N);
    system("pause");
}
return 0;
}
//赋值数组
void Init(int arr[], int n){
    int i = 0;
for(;i < n;i++){
    arr[i] = rand() % 100; //取模运算,限定随机数范围
}
}
 
//冒泡排序
void Sort_bul(int* arr, int n)
{
int i;
int j;
//外层循环:总排序轮数=元素个数-1
for (i = 0;i < n- 1;i++)
{
//内层循环:每轮对比次数=元素个数-当前轮数-1
for (j = 0;j < n - i-1;j++)
{
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
 
//选择排序
void Sort_sel(int* arr, int n)
{
int i;
int j;

//外层循环:总排序轮数=元素个数-1

for (i = 0;i <n - 1;i++)
{
int temp=arr[n-1];
int index=n-1;
for(j=i;j<n-1;j++){
if (temp >= arr[j]){
temp = arr[j];
index=j;
}
}
temp=arr[i];
arr[i]=arr[index];
arr[index]=temp;
}
}
 
//输出语句
void Output(int arr[], int n){//可不需传递n,直接使用N
int i=0;
for (;i < n;i++){
printf("%5d", arr[i]);
if ((i + 1) % 20 == 0) //二十个一组
{
printf("\n");
}
}
}

应该有行号提醒吧,这明显是语法错误

每个函数里传参有int n了不用再定义了

img

#include<stdio.h>
#include<stdlib.h>
#define N 100
void Init(int arr[], int n);
void Sort_bul(int arr[], int n);
void Sort_sel(int arr[], int n);
void Output(int arr[], int n);

main()
{
int i;
int n;
int arr[N];

Init(arr,N);
Output(arr, N);
 
printf("请选择排序方式:1.选择排法 2.冒泡排序法");
scanf("%d", &n);
if (n == 1)
{
    Sort_sel(arr,N);
    Output(arr,N);
}
if(n==2)
{
    Sort_bul(arr,N);
    Output(arr,N);
}
return 0;
}
//赋值数组
void Init(int arr[], int n)
{
int i;
int n;
for (int i = 0;i < n;i++)
{
    arr[i] = rand() % 100; //取模运算,限定随机数范围
}
}

//冒泡排序
void Sort_bul(int arr[], int n)
{
int i;
int j;
int temp;
int n;
//外层循环:总排序轮数=元素个数-1
for (i = 0;i < n- 1;i++)
{
//内层循环:每轮对比次数=元素个数-当前轮数-1
for (j = 0;j < n - i;j++)
{
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}

//选择排序
void Sort_sel(int arr[], int n)
{
int i;
int j;
int temp;
int n;
//外层循环:总排序轮数=元素个数-1
for (i = 0;i <n - 1;i++)
{
//内层循环:每轮对比次数=元素个数-1
for (j = 0;j < n - i;j++)
{
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}

//输出语句
void Output(int arr[], int n)
{
int i;
int n;
for (int i = 0;i < n;i++)
{
printf("%5d", arr[i]);
if ((i + 1) % 20 == 0) //二十个一组
{
printf("\n");
}
}
}

你发的都有;,如果没有也会报错提示哈

重装vs2010