【小白求教】写了个程序,指针有点问题
我感觉指针没有什么问题了,但是就还是那两行报错。感谢各位大神帮忙~程序代码:
#include<stdio.h> #include<stdlib.h> #define NUM 5 void save(int* p, int n); void read(int* p, int n); void menu(); void output(int* p, int num); void scan(int* p, int num); int checkLoc(int loc); int insert(int a[NUM + 1], int N, int b, int c); int deleting(int a[NUM + 1], int b); int find(int a[NUM + 1], int x); int main() { int select;//选项输入 int flag, index;//标志数字 int loc, x;//位置和数字 int t; int i;//循环参数 int a[NUM + 1]; for (i = 0; i < NUM; i++) { scanf("%d", &a[i]);//通过键盘给数组赋值 } //read(a,NUM);//通过文件读入数值 output(a, NUM);//请打印数组 for (;;) { menu(); printf("请输入选项1-5进行选择:\n"); scanf("%d", &select); switch (select) { case 1: while (1) { printf("请输入待插入一个位置\n"); scanf("%d", &loc); t = checkLoc(loc); if (t == 1)//checkLoc函数用来检测插入或删除位置的检测,比如位置不能小于0 break; } printf("请输入一个待插入的数:\n"); scanf("%d", &x); flag = insert(a[NUM + 1], NUM, loc, x); output(a, NUM);//请在a数组中的loc位置插入一个值x,成功返回1,不成功返回0 break; case 2: while (1) { printf("请输入待删除一个位置:\n"); scanf("%d", &loc); t = checkLoc(loc); if (t == 1)//checkLoc函数用来检测插入或删除位置的检测,比如位置不能小于0 break; } flag = delete(a[NUM + 1], loc);//请在a数组的loc位置删除一个数,成功返回1,不成功返回0 break; case 3: index = find(a[NUM + 1], x);//请在a数组中查找x,成功返回x所在下标,不成功返回-1 break; case 4: //update(a, loc, x, NUM + 1); break; case 5: exit(0); default: printf("输入有误,请重新输入"); } } save(a, NUM + 1); } void save(int* p, int n) { FILE* fp; if ((fp = fopen("f:\\ab.txt", "wb+")) == NULL) { printf("cannot open file "); exit(0); } int t = fwrite(p, sizeof(int), n, fp); printf("t=%d", t); fclose(fp); } void read(int* p, int n) { FILE* fp; if ((fp = fopen("f:\\ab.txt", "rb")) == NULL) { printf("cannot open file "); exit(0); } int t = fread(p, sizeof(int), 5, fp); int i; for (i = 0; i <= n - 1; i++) { printf("p[i]=%d", p[i]); } fclose(fp); } void menu() { printf("\n\t\t\t\twelcome to the data world!\n"); printf("\n"); printf("\t\t\t1、向数组插入数值 2、删除数组的值\n"); printf("\n"); printf("\t\t\t3、查找数组元素 4、修改数组的值\n"); printf("\n"); printf("\t\t\t5、退出\n"); printf("\n"); } void output(int* p, int num) { int i; for (i = 0; i <= num - 1; i++) { printf("%4d", p[i]); } } void scan(int* p, int num) { int i; printf("请给数组赋值:%d个\n", num); for (i = 0; i <= num - 1; i++) { scanf("%d", &p[i]); } } int checkLoc(int loc) { if (loc < 0 || loc>4) { printf("输入位置无效\n"); return 0; } else return 1; } int insert(int a[NUM + 1], int N, int b, int c) //添加函数,这个函数有问题 { int i; for (i = N; i >= b + 1; i--) a[i] = a[i - 1]; a[b] = c; printf("插入数据后的序列为:\n"); for (i = 0; i <= N; i++) printf("%4d", a[i]); printf("\n"); } int deleting(int a[NUM + 1], int b)//删除数组 { int i; for (i = b; i < NUM; i++) { a[i] = a[i + 1]; } printf("删除数组后的序列为:\n"); for (i = 0; i <= NUM; i++) printf("%4d", a[i]); printf("\n"); } int find(int a[NUM + 1], int x) { int i; for (i = 0; i < NUM; i++) { if (a[i] == x) { return i; } } return -1; }