函数声明的错误

错误来源·例题:数组的输入与输出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <stdio.h>
#define M 3
#define N 4
#void input(int a[][N]);
#void output(int b[][N]);
//输出arr[3][4]的所有数组元素的值(按列输出)
int main(void)
{
//int arr[M][N] = { {1,4,7,10},{2,5,8,11},{3,6,9,12} };
int arr[M][N];
input(arr);
output(arr);
return 0;
}
//函数功能:对数组进行赋值
void input(int a[][N])
{
int i, j;
for (i = 0;i < M;i++) //行下标遍历
{
for (j = 0;j < N;j++)//列下标遍历
{
scanf_s("%d\t", &a[i][j]);
}
printf("\n");
}
}
//函数功能:对数组进行输出
void output(int b[][N])
{
int i = 0, j = 0;

for (i = 0;i < M;i++) //行下标遍历
{
for (j = 0;j < N;j++)//列下标遍历
{
printf("%d\t", b[i][j]);
}
printf("\n");
}
}

编译过程中的错误提示:

E0011 无法识别的预处理指令 数组

C:\Users\luo66\Desktop\C语言实验报告\数组\源.cpp 5

处理问题后的代码为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <stdio.h>
#define M 3
#define N 4
void input(int a[][N]);
void output(int b[][N]);
//输出arr[3][4]的所有数组元素的值(按列输出)
int main(void)
{
//int arr[M][N] = { {1,4,7,10},{2,5,8,11},{3,6,9,12} };
int arr[M][N];
input(arr);
output(arr);
return 0;
}
//函数功能:对数组进行赋值
void input(int a[][N])
{
int i, j;
for (i = 0;i < M;i++) //行下标遍历
{
for (j = 0;j < N;j++)//列下标遍历
{
printf("请给第%d行第%d列的数赋值\n", i + 1, j + 1);
scanf("%d", &a[i][j]);
}
printf("\n");
}
}
//函数功能:对数组进行输出
void output(int b[][N])
{
int i = 0, j = 0;

for (i = 0;i < M;i++) //行下标遍历
{
for (j = 0;j < N;j++)//列下标遍历
{
printf("%d\t", b[i][j]);
}
printf("\n");
}
}

解决方法:

  1. 函数声明前面不需要加#
  2. scanf的引号内不能加/t

感悟心得:有点小粗心,过分依赖软件自身的扫描,没想到scanf里面加\t不是语法问题,系统扫描不出来,就自己在傻傻的看头文件。真的越学越像头猪了。越简单的错误越容易让人忽略,下次要注意敲代码的习惯