| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 431 人关注过本帖
标题:结构体数组问题
只看楼主 加入收藏
hzy0123
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2014-12-2
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
结构体数组问题
#include<stdio.h>
struct stu
{
    int num;
    char name[20];
    char sex;
    int age;
    float grade;
   
} ;
int read(struct stu*p1)
{                          
    scanf("%d%s%c%d%f",&p1->num,p1->name,&p1->sex,&p1->age,&p1->grade);
    return 0;
}
int print(struct stu p2)
{
    printf("%d %s %c %d %f\n",p2.num,p2.name,p2.sex,p2.age,p2.grade);
    return 0;
}
int paixu(struct stu*(q[5]))
{
    int i,j,t;
    for(i=0;i<4;i++)
    {
        for(j=0;j<4-i;j++)
        if (q[j]->grade>q[j+1]->grade )
        {
            t=q[i]->grade;
            q[i]->grade=q[i+1]->grade;
            q[i+1]->grade=t;
            
        }
    }
    return 0;   
}                       
int main()
{
    int a;
    struct stu s1[5],*n=s1;
    struct stu*(s2[5]);
    printf("请输入排序序列\n");
    for(a=0;a<=4;a++)
    read(n+a);
    printf("请输出开始序列\n");
    for(a=0;a<=4;a++)
    print(s1[a]);
    for(a=0;a<=4;a++)
    s2[a]=&(s1[a]);
    paixu(s2);
    printf("请输出排序后序列\n");
    for(a=0;a<=4;a++)
    print(s1[a]);
    return 0;
   
   
}
各位大神帮我看一下那里错了 题目是定义结构体数组,数组各项分别为学号,姓名,性别,年龄,成绩,数组长度为5;然后定义输入输出函数和按成绩排序函数,运行时先输出原来数组,在输出排序过的,我运行时乱码,谢谢各位大神
搜索更多相关主题的帖子: include return 结构体 
2014-12-02 16:18
lyl930130
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:323
专家分:111
注 册:2013-5-13
收藏
得分:10 
输入的问题,你在scanf里面%X和%Y之间加一个空格就好了。
至于原理为什么我也不清楚,等大神解读,猜测应该是缓存问题。
2014-12-02 16:38
liao06550107
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:111
专家分:696
注 册:2011-10-2
收藏
得分:10 
scanf("%d%s%c%d%f",&p1->num,p1->name,&p1->sex,&p1->age,&p1->grade);中%c的数据接收可能有问题,你肯定是使用空格(或者回车)来分隔各个输入的数据。这样在%s的字符串数据成功读取(遇到空格就结束字符串的接收)后,%c必定会接收字符串后的空格,从而导致从它以及后面的数据都不对了。
修改方法如下:
方法一、把变量sex值的获取放在第一位,即scanf("%c%d%s%d%f",&p1->sex,&p1->num,p1->name,&p1->age,&p1->grade);
方法二、在%c前面加个%*c(吃掉字符串后面的一个空格)即scanf("%d%s%*c%c%d%f",&p1->num,p1->name,&p1->sex,&p1->age,&p1->grade);
方法三、就是在%c前面加个空格即scanf("%d%s %c%d%f",&p1->num,p1->name,&p1->sex,&p1->age,&p1->grade);
若非格式字符为空白符,则可输入零个或多个空白符。使用空白字符会使scanf()函数在读操作中略去输入中的一个或多个空白字符。例如:scanf(“%c %c”,&a,&b);其中用空格符作间隔,故输入应为:ab或a(中间零个或多个空白符)b。


[ 本帖最后由 liao06550107 于 2014-12-2 23:59 编辑 ]

听不同的音乐,看不同的书,游历不同的城市,邂逅不同的人,走的多了,站的高了,自然就看的远了。
2014-12-02 23:50
快速回复:结构体数组问题
数据加载中...
 
   



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

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