标题:初学结构体,程序老是崩,求大神指点
只看楼主
cjj843138864
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2016-12-23
结帖率:0
已结贴  问题点数:10 回复次数:14 
初学结构体,程序老是崩,求大神指点
#include "stdafx.h"
#include"stdlib.h"
#include"assert.h"
#include"string.h"

typedef struct _PERSON
{
    char *name;
    int count;
}PERSON;

int main()
{
    printf_s("请输入有几位候选人:");
    int n;
    scanf_s("%d", &n);
    PERSON *p = (PERSON *)malloc(sizeof(PERSON)*n);
    assert(p != NULL);
    for (int j = 0; j < n; j++)
    {
        char *s = (char *)malloc(sizeof(char) * 20);
        assert(s != NULL);
        p[j].name = s;
        printf_s("请输入有第%d候选人名字:", j + 1);
        scanf_s("%s", s);
    }
   return 0;
}
搜索更多相关主题的帖子: include 结构体 候选人 count 
2017-02-11 20:42
炎天
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:桃花岛
等 级:贵宾
威 望:29
帖 子:1218
专家分:4986
注 册:2016-9-15
得分:2 
在你输入超过20个字符时崩溃, char *s = (char *)malloc(sizeof(char) * 20);把20改大些

早知做人那么辛苦!  当初不应该下凡
2017-02-11 21:05
cjj843138864
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2016-12-23
得分:0 
回复 2楼 炎天
改大了   但是还是不行
2017-02-11 21:30
cjj843138864
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2016-12-23
得分:0 
回复 2楼 炎天
那只是代码的一部分  但是老是崩  对名字在堆里面开辟了一块空间   想在这个堆里面手写入字符串   就是不行   把scanf("%s",s);改成gets_s(s);也不行    改成for(int i=0;i<20;i++){scanf("%c",&s[i]);}不会崩   但是输入就不连续了   每次打完一个字母还要有Enter结束还只能打十个中间算上\0正好20个    怎么改代码才能在名字这个堆里面连续写入字符串
2017-02-11 21:37
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:2 
在非VC试无异常。

//#include "stdafx.h"
#include"stdio.h"
#include"stdlib.h"
#include"assert.h"
#include"string.h"

typedef struct _PERSON
{
    char *name;
    int count;
}PERSON;

int main()
{
    printf_s("请输入有几位候选人:");
    int n;
    scanf_s("%d", &n);
    PERSON *p = (PERSON *)malloc(sizeof(PERSON)*n);
    assert(p != NULL);
    int j;
    for (j = 0; j < n; j++)
    {
        char *s = (char *)malloc(sizeof(char) * 20);
        assert(s != NULL);
        p[j].name = s;
        printf_s("请输入有第%d候选人名字:", j + 1);
        scanf_s("%s", s);
    }
   return 0;
}
2017-02-11 21:37
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
得分:2 
回复 楼主 cjj843138864
你这个是cpp文件吗?怎么允许你在代码中间定义变量的?试一下把s的定义放到for外面去看行不行。猜的
2017-02-11 21:58
cjj843138864
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2016-12-23
得分:0 
回复 5楼 吹水佬
#include "stdafx.h"
#include"stdlib.h"
#include"assert.h"
#include"string.h"

typedef struct _PERSON
{
    char *name;
    int count;
}PERSON;

int main()
{
    printf_s("请输入有几位候选人:");
    int n;
    scanf_s("%d", &n);
    PERSON *p = (PERSON *)malloc(sizeof(PERSON)*n);
    assert(p != NULL);
    for (int j = 0; j < n; j++)
    {
        char *s = (char *)malloc(sizeof(char) * 30);
        assert(s != NULL);
        p[j].name = s;
        printf_s("请输入有第%d候选人名字:", j + 1);
        scanf_s("%s", s);
    }
    char input[20];
    printf_s("请输入有几个选举人:");
    int m;
    scanf_s("%d", &m);
    for (int i = 0; i < m; i++)
    {
        printf_s("第%d投票人:",i+1);
        gets_s(input);
        for (int k = 0; k < n; k++)
        {
            if (strcmp(p[k].name, input) == 0)
            {
                p[k].count++;
                break;
            }
        }
    }
    PERSON max=p[0];
    for (int a = 0; a < n - 1; a++)
    {
        if (p[a].count > p[a + 1].count)
        {
            max = p[a];
        }
    }
    printf_s("票数最多的是:");
    printf_s("%s-%d", max.name, max,max.count);

   return 0;
}
这是全部代码  也能运行吗?    为什么我的老是冲突
2017-02-11 22:12
cjj843138864
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2016-12-23
得分:0 
回复 5楼 吹水佬
2017-02-11 22:15
cjj843138864
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2016-12-23
得分:0 
回复 6楼 yangfrancis
你的意思是这样改吗?  好像也不行啊
2017-02-11 22:20
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
得分:2 
回复 6楼 yangfrancis
C语言可以在代码中间定义变量,甚至可以在for,if,while中定义。(不过的确有些编译器不支持在for,if,while语句中定义变量,但应该都支持在for,if,while所属的代码块中定义变量。)

您翻翻书上关于作用域、存储类、链接的章节。

C_Primer_Plus,第十二章有很详细的讲述。

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-02-11 22:25



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-474138-1-1.html




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

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