| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1421 人关注过本帖
标题:【小白求教】写了个程序,指针有点问题
只看楼主 加入收藏
Loisyi
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2020-12-11
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:4 
【小白求教】写了个程序,指针有点问题
我感觉指针没有什么问题了,但是就还是那两行报错。感谢各位大神帮忙~
程序代码:
#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;
}
2021-02-24 22:39
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:20 
哪粮行指出来嘛

flag = insert(a[NUM + 1], NUM, loc, x);
改为
flag = insert(a, NUM, loc, x);

flag = delete(a[NUM + 1], loc)
改为
flag = deleting(a, loc);

index = find(a[NUM + 1], x);
改为
index = find(a, x);

int insert(int a[NUM + 1], int N, int b, int c)函数 和 int deleting(int a[NUM + 1], int b)函数 缺少 return语句。
2021-02-25 07:41
Loisyi
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2020-12-11
收藏
得分:0 
回复 2楼 rjsp
哈哈哈,抱歉了。
改完之后能运行了,但是请问为什么这么改啊,我没想明白。
2021-02-25 09:47
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
回复 3楼 Loisyi
int a[NUM + 1];
定义了一个数组,名字叫 a,类型是 int [NUM + 1];

a[NUM + 1]
取a这个数组中第NUM+1个元素

举个例子
int a[3] = { 12, 23, 34 };
那么 a[0] 的值是 12; a[1] 的值是 23; a[2] 的值是 34.
并不存在 a[3]
2021-02-25 16:42
Loisyi
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2020-12-11
收藏
得分:0 
回复 4楼 rjsp
我明白了,谢谢。
额外再问一个问题,
switch里case3,我在运行的时候,选3之后又跳会menu了,没有进行后续的工作,这是咋回事
2021-02-26 17:26
快速回复:【小白求教】写了个程序,指针有点问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028099 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved