music_song 2023-01-16 16:29 采纳率: 87.2%
浏览 25
已结题

为什么执行完后,最后一个结构体的name也就是z怎么不见了

代码如下,当我输入
“z
15227036227
a
15227036227
b
13230602579
c
13230602579
d
134632026889”时运行接过如下,执行到最后z为什么不见了?

img


#include<stdio.h>
#include<string.h>
#define N 5
typedef struct {
    char name[20];
    char num[12];
}USER;

void getdata(USER* sp);
void getsort(USER* sp);
void outdata(USER *sp);
int main()//主函数
{
    USER sp[N];
    getdata(sp); outdata(sp);getsort(sp); putchar('\n');outdata(sp);printf("\n\n%s", sp[4].name);
    return 0;
}
void getdata(USER* sp)//进行输入5个数据
{
    int i;
    for (i = 0; i < 5; i++)
        scanf("%s%s", sp[i].name, sp[i].num);
}
void getsort(USER* sp)
{
    int i, j;
    char temp[20];
    for (i=0;i<4;i++)
        for(j=0;j<4-i;j++)
            if (strcmp(sp[j].name, sp[j+1].name) > 0)//如果比后面一个名字大则替换两边数据
            {    printf("%s交换%s\t", sp[j].name, sp[j+1].name);//在屏幕输出交换的双方
                strcpy(temp, sp[j].name);
                strcpy(sp[j].name, sp[j+1].name);
                strcpy(sp[j+1].name, temp);
        
                strcpy(temp, sp[j].num);
                strcpy(sp[j].num, sp[j+1].num);
                strcpy(sp[j+1].num, temp);
                printf("%s已经和%s交换\t", sp[j+1].name, sp[j].name);//在屏幕输出已经交换成功了
            }
}
void outdata(USER *sp)//进行输出5个数据
{
    int i;
    for (i = 0; i < 5; i++)
    printf("\n%s:%s\n", sp[i].name, sp[i].num);
}
  • 写回答

1条回答 默认 最新

  • qzjhjxj 2023-01-16 17:06
    关注

    结构体里 char num[12]; 定义12位小了,输入最后的 d 134632026889 这里13位了,越界了,修改如下,供参考:

    #include<stdio.h>
    #include<string.h>
    #define N 5
    typedef struct {
        char name[20];
        char num [20]; //char num[12];  修改
    }USER;
    
    void getdata(USER* sp);
    void getsort(USER* sp);
    void outdata(USER* sp);
    int main()//主函数
    {
        USER sp[N];
        getdata(sp); 
        outdata(sp); 
        getsort(sp); 
        putchar('\n'); 
        outdata(sp); 
        printf("\n\n%s", sp[4].name);
        return 0;
    }
    void getdata(USER* sp)//进行输入5个数据
    {
        int i;
        for (i = 0; i < 5; i++)
            scanf("%s %s", sp[i].name, sp[i].num);
    }
    void getsort(USER* sp)
    {
        int i, j;
        char temp[20];
        for (i = 0; i < 4; i++)
            for (j = 0; j < 4 - i; j++)
                if (strcmp(sp[j].name, sp[j + 1].name) > 0)//如果比后面一个名字大则替换两边数据
                {
                    printf("%s交换%s\t", sp[j].name, sp[j + 1].name);//在屏幕输出交换的双方
                    strcpy(temp, sp[j].name);
                    strcpy(sp[j].name, sp[j + 1].name);
                    strcpy(sp[j + 1].name, temp);
    
                    strcpy(temp, sp[j].num);
                    strcpy(sp[j].num, sp[j + 1].num);
                    strcpy(sp[j + 1].num, temp);
                    printf("%s已经和%s交换\t", sp[j + 1].name, sp[j].name);//在屏幕输出已经交换成功了
                }
    }
    void outdata(USER* sp)//进行输出5个数据
    {
        int i;
        for (i = 0; i < 5; i++)
            printf("\n%s:%s\n", sp[i].name, sp[i].num);
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 1月24日
  • 已采纳回答 1月16日
  • 创建了问题 1月16日

悬赏问题

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