杜拜要睡觉了 2022-08-21 14:49 采纳率: 90%
浏览 140
已结题

一个朴实无华的编译器问题

各位,我想问个问题,就是我c语言写了一个学生通讯录,用vs2022写的,然后运行了一次,所有功能就都正常,但是第二次运行就不行了,没有报错,但功能缺失了很多,后来怎么样都不行,然后换vs2019却是正常运行的,这是为什么,望解答,谢谢。

#include<stdio.h>
#include<string.h>

//通讯录结构体
typedef struct {
char name[50];
char phone[50];
char home[50];
char email[50];
} people;

void sort(people* arr, int n) { //传地址
int ret=0;
if (arr[n - 1].name != '\0') {
for (int i = 0; i < n; i++) {
int k = i;
for (int j = i + 1; j < n; j++) {
if (strcmp(arr[k].name, arr[j].name) < 0) { //选出最大的
k = j;
}
if (k != i) {
people w = arr[i];
arr[i] = arr[k];
arr[k] = w;
}
}
}
}
return 0;
}

int main() {

printf("       欢迎使用学生管理系统   \n");

    printf("     1、添加联系人    2、修改通讯录\n");
    printf("     3、删除联系人    4、显示通讯录\n");
    printf("     5、查找通讯录    0、退出通讯录\n");
   
    int a;
     people arr[50] = { '0' };
    printf("选择请选择功能,请输入0—5,回车结束!\n");
    scanf_s("%d", &a);
    int w = getchar();
    static int n = 0; //存取时的数组下标号
    while (a != 0) {
        switch (a) {
        
            case 0: { return 0;
            }
                case 1: {
                    printf("请根据提示输入信息,以回车为分隔\n");
                    printf("姓名    电话号码    地址    电子邮件\n");
                    gets_s(arr[n].name, 10);
                    gets_s(arr[n].phone, 15);
                    gets_s(arr[n].home, 50);
                    gets_s(arr[n].email, 30);
                    ++n; //递增,指向下一个空元素。
                    printf("存储成功!\n");
                    people* v;
                    v = &arr[0];
                        sort(v, n);
                        printf("选择请选择功能,请输入0—5,回车结束!\n");
                        scanf_s("%d", &a);
                        w = getchar();
                    break;   //case语句结束后必须break才能跳出switch语句。
                }

                    case 2: {               //结构体指针
                        int o,l=1;
                        people* p;
                        
                            for (int i = 0; i < n; i++) {
                                if (arr[i].phone[0] != '\0') {
                                printf("%d、%s %s %s %s\n", l, arr[i].name, arr[i].phone, arr[i].home, arr[i].email);
                                l++;
                                }
                            }
                        printf("根据序号选择你要更改的通讯录信息,回车结束!\n");
                        scanf_s("%d", &o);
                        p= &arr[o-1];
                        w=getchar();
                        printf("请根据提示输入信息,以回车为分隔\n");
                        printf("姓名    电话号码    地址    电子邮件\n");
            
                        gets_s(p ->name, 10);
                        gets_s(p->phone, 15);
                        gets_s( p->home, 50);
                        gets_s(p->email, 30);
                        printf("存储成功!\n");
                        printf("选择请选择功能,请输入0—5,回车结束!\n");
                        scanf_s("%d", &a);
                        w = getchar();
                        break;
                    }
                    case 3: {
                        int x,z=1;
                        printf( "通过序号选择你要删除的通讯录,回车确定\n" );
                        
                        for (int i = 0; i < n; i++, z++) {
                                printf("%d、%s %s %s %s\n", z, arr[i].name, arr[i].phone, arr[i].home, arr[i].email);
                        }
                        scanf_s("%d", &x);
                        people* t;
                        people* p;
                        t = &arr[x - 1];
                        p = &arr[x];
                        for (int i=x-1; i < n; t++,p++,i++) {
                            strncpy_s(t->name, 10, p->name, 10);
                            strncpy_s(t->phone, 15, p->phone, 15);
                            strncpy_s(t->home, 30, p->home, 30);
                            strncpy_s(t->email, 20, p->email, 20);
                        }
                        printf("删除成功\n");
                        printf("选择请选择功能,请输入0—5,回车结束!\n");
                        scanf_s("%d", &a);
                        w = getchar();
                        break;
                    }
                    case 4: {
                        int l = 1;
                        for (int i = 0; i < n; i++) {
                            if (arr[i].phone[0] != '\0') {
                                printf("%d、%s %s %s %s\n", l, arr[i].name, arr[i].phone, arr[i].home, arr[i].email);
                                l++;
                            }
                        }
                        printf("选择请选择功能,请输入0—5,回车结束!\n");
                        scanf_s("%d", &a);
                        w = getchar();
                        break;
                    }
                    case 5: {
                        printf("请输入您要查找的名字\n");
                        char brr[10];
                        people* h;
                        gets_s(brr, 10);
                        char* u;
                        h = &arr[0];
                        u = &brr[0];
                        for (int i = 0; i < n; i++,h++, u++) {
                            if (*u == *h->name) {
                                printf("%s %s %s %s\n", arr[i].name, arr[i].phone, arr[i].home, arr[i].email);
                            }
                        }
                        printf("以上就是您要查找的信息\n");
                        printf("选择请选择功能,请输入0—5,回车结束!\n");
                        scanf_s("%d", &a);
                        w = getchar();
                    }
                        
        }
          
            
       
    }
    printf("程序正常退出,记得五星好评呦~\n");
return 0;

}

  • 写回答

4条回答 默认 最新

  • 叶落秋白 后端领域优质创作者 2022-08-21 21:01
    关注

    scanf_s换成scanf并加上

    #define _CRT_SECURE_NO_WARNINGS//visual stduio 中优化scanf函数
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 9月5日
  • 已采纳回答 8月28日
  • 创建了问题 8月21日

悬赏问题

  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测