小白兔会飞飞 2022-03-11 16:53 采纳率: 50%
浏览 23
已结题

VS2017 我用scanf_s输入的,无法用strcmp与"000000"比较

我学习链表,遇到scanf_s与strcmp的问题:代码如下

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#pragma warning (disable:4996)
#pragma warning (disable:4703)
typedef struct stu
{
    char name[55]; //姓名
    char xuehao[10];//学号
    struct stu *next;//指针域
}kk;
kk *create(int n)
{
    int i = 1;
    kk *head=NULL, *new, *tail;//创建三个结构体指针
    for (; i <= n; i++)
    {
        new=(kk *)malloc(sizeof(kk)); //申请节点
        printf("请输入第%d个学号:", i);
        scanf_s("%s", &new->xuehao,6);//输入6位学号
        if (strcmp(new->xuehao, "000000") == 0)//学号为000000,则结束
        {
            printf("输入错误");
            free(new);
            break;

        }
        printf("请输入第%d个姓名:",i);
        scanf_s("%s", &new->name,55);
        new->next = NULL; //指针域为空
        if(i==1)  head=new; 
       else      tail->next=new;        
         tail=new;                  
        

    }
    return head;
}
void main()

{
    int n,i;
    kk* p;
    printf("请输入人员个数:");
    scanf("%d", &n);
    p = create( n);

    for (i = 1; i <= n; i++)
    {
        printf("%s", p->name);
        p = p->next;
    }
    
}

img


遇到"000000"并没有退出,反而进行下面的;
把scanf_s改为scanf就不会出现这种情况

img

为什么勒

  • 写回答

2条回答 默认 最新

  • 一只蚂蝼 2022-03-11 17:36
    关注

    首先,你上面那个还算勉强正常运行,下面改成scanf都已经报错了。再就是scanf_s("%s", &new->xuehao,6);这句里的两个参数都是有问题的。new->xuehao是一个数组名,本身已经是一个地址是不需要&取地址的,然后每个字符串最后都要有个结束符,所以这里你想要接收6个字符的字符串,长度应该设成7。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月19日
  • 已采纳回答 3月11日
  • 创建了问题 3月11日

悬赏问题

  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况