| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 875 人关注过本帖
标题:看看我的查找的那个函数,输入超过十九个字符就提示内存冲突
只看楼主 加入收藏
新人学习
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:145
专家分:187
注 册:2017-10-26
结帖率:66.67%
收藏
 问题点数:0 回复次数:3 
看看我的查找的那个函数,输入超过十九个字符就提示内存冲突
#include"fenlei.h"
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

//  高手帮帮忙能不能让我的输入字符串的地方更优化些....

void zhuce(struct Dangan* &_head,struct Dangan* &_p1,struct Dangan* &_p2)  //注册
{
    int i,m;
    _p1 = (struct Dangan*)malloc(sizeof(struct Dangan));
    if(_head == NULL)
    {
        _head = _p1;
        _head->next = NULL;
        _p2 = _p1;
    }
    else
    {
        _p2->next = _p1;
        _p2 = _p1;
        _p2->next = NULL;
    }
    printf("输入学生姓名:");          //学生姓名输入
    fgets(_p1->name,19,stdin);
    i = 1;
    while(_p1->name[i-1] != '\0')
    {
        if(_p1->name[i] == '\n')
            _p1->name[i] = '\0';
        i++;
    }
   

    printf("输入学生性别(男或女):");    //学生性别输入
    scanf("%s",_p1->xingbie);
    while(getchar()!='\n');
    while(strcmp(_p1->xingbie,"男")!=0 && strcmp(_p1->xingbie,"女")!=0)
    {
        printf("输入学生性别(男或女):");
        scanf("%s",_p1->xingbie);
        while(getchar()!='\n');
    }
    printf("%s在几年级:",_p1->name);  //学生上几年级
    scanf("%c",&_p1->ji);
    while(getchar()!='\n');
    printf("%s在%c年级几班:",_p1->name,_p1->ji);  //学生在几班
    scanf("%c",&_p1->ban);
    while(getchar()!='\n');
    printf("%s在%c年级%c班.\n",_p1->name,_p1->ji,_p1->ban);

    printf("输入%s同学的语文成绩:",_p1->name);                //语文 数学 英语 三门课程
    while((m = scanf("%d",&_p1->chengji[0])) != 1 && _p1->chengji[0] < 0 || _p1->chengji[0] > 100)
    {
        if(m != 1)
            scanf("%*s");
        printf("请输入0-100之间的整形类型的数字:");
    }
    printf("输入%s同学的数学成绩:",_p1->name);
    while((m = scanf("%d",&_p1->chengji[1])) != 1 && _p1->chengji[1] < 0 || _p1->chengji[1] > 100)
    {
        if(m != 1)
            scanf("%*s");
        printf("请输入0-100之间的整形类型的数字:");
    }
        printf("输入%s同学的英语成绩:",_p1->name);
    while((m = scanf("%d",&_p1->chengji[2])) != 1 && _p1->chengji[2] < 0 || _p1->chengji[2] > 100)
    {
        if(m != 1)
            scanf("%*s");
        printf("请输入0-100之间的整形类型的数字:");
    }
    while(getchar()!='\n');
    _p1->zongfen = _p1->chengji[0] + _p1->chengji[1] + _p1->chengji[2];  //学生总分
    _p1->pingjun = (double)_p1->zongfen / 3.0;              //学生平均分数
    printf("*****************************\n");
    printf("姓名: %s\n",_p1->name);
    printf("性别: %s\n",_p1->xingbie);
    printf("班级: %c年级%c班",_p1->ji,_p1->ban);
    printf("语文成绩:%d\n数学成绩:%d\n英语成绩:%d\n",_p1->chengji[0],_p1->chengji[1],_p1->chengji[2]);
    printf("总分数:%d\n平均分:%.lf\n",_p1->zongfen,_p1->pingjun);
    printf("         注册成功\n*****************************\n");

}

void Display(struct Dangan *_p1)     //显示档案所有内容
{
    struct Dangan *p;
    p = _p1;
    if(p == NULL)
    {
        printf("没有注册会员\n");
    }
    else
    {
        while(p->next != NULL)
        {
                printf("%s是%s同学,在%c年级%c班,\n语文成绩是%d,数学成绩是%d,英语成绩是%d,总分是%d,平均分数是%.2lf.\n",
               _p1->name,_p1->xingbie,_p1->ji,_p1->ban,_p1->chengji[0],_p1->chengji[1],_p1->chengji[2],_p1->zongfen,_p1->pingjun);
                p = _p1;
               _p1 = _p1->next;
        }
    }
}

void Display1(struct Dangan *p)      //显示每个struct单元的首地址
{
    struct Dangan *_p;
    _p = p;
    if(p == NULL)
    {
        printf("没有注册会员\n");
    }
    else
    {
        while(_p->next != NULL)
        {
                printf("%p\n",p);
                _p = p;
                p = p->next;
        }
    }
}
char caidan(void)              //菜单选项输入
{
    char ch;
    printf("1)注册 2)查找 3)删除 4)显示所有会员 5)退出\n");
    printf("请输入你的选项(1-5):");
    ch = getchar();
    while(getchar()!='\n');
    while(ch<'1' || ch>'5')
    {
        printf("请认真的再次输入(1-5):");
            ch = getchar();
            while(getchar()!='\n');
    }
    return ch;
}
void chazhao(struct Dangan *p)     //查找
{
    char name[20];
    int i;
    struct Dangan *_p;
    _p = p;

    printf("输入要查找的姓名");
    for(i = 0; name[i-1] != '\n';i++)
    {
        name[i] = getchar();
    }
    if(name[i-1] == '\n')
        name[i-1] = '\0';

    if(p == NULL)
    {
        printf("没有注册会员\n");
    }
    else
    {
        while(_p->next != NULL)
        {
            if(strncmp(name,p->name,19)==0)
            {
                printf("*****************************\n");
                printf("姓名: %s\n",p->name);
                printf("性别: %s\n",p->xingbie);
                printf("班级: %c年级%c班",p->ji,p->ban);
                printf("语文成绩:%d\n数学成绩:%d\n英语成绩:%d\n",p->chengji[0],p->chengji[1],p->chengji[2]);
                printf("总分数:%d\n平均分:%.lf\n",p->zongfen,p->pingjun);
                printf("         学员属性\n*****************************\n");
                break;
            }
        
            _p = p;
            p = p->next;
        
        }
    }
   
}


void shanchu(struct Dangan * &p)
{
   
}
搜索更多相关主题的帖子: 输入 struct printf name while 
2018-02-02 13:12
新人学习
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:145
专家分:187
注 册:2017-10-26
收藏
得分:0 
提示的不是内存冲突
是这样的代码
Run-Time Check Failure #2 - Stack around the variable 'name' was corrupted.
2018-02-02 13:17
炎天
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:桃花岛
等 级:贵宾
威 望:29
帖 子:1218
专家分:4986
注 册:2016-9-15
收藏
得分:0 
void chazhao(struct Dangan *p)     //查找
{
    char name[20];         //char name[100] 那就开更大的空间
    int i;
    struct Dangan *_p;
    _p = p;

    printf("输入要查找的姓名");
    for(i = 0; name[i-1] != '\n';i++)      //循环第一次  name[-1] 是怎么回事!  直接gets(name)不就好了
    {
        name[i] = getchar();
    }

早知做人那么辛苦!  当初不应该下凡
2018-02-02 13:18
新人学习
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:145
专家分:187
注 册:2017-10-26
收藏
得分:0 
大意了。
2018-02-02 17:05
快速回复:看看我的查找的那个函数,输入超过十九个字符就提示内存冲突
数据加载中...
 
   



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

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