| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 789 人关注过本帖
标题:信息的输入与输出
只看楼主 加入收藏
流年226
Rank: 1
等 级:新手上路
帖 子:37
专家分:7
注 册:2013-4-27
结帖率:71.43%
收藏
已结贴  问题点数:10 回复次数:12 
信息的输入与输出
#include<stdio.h>
struct
{
    int num;
    char name[10];
    char sex;
    union
    {
        char sight;
        float hw[2];
    }a;
}student[10];
void main()
{
    int i=0;
    printf("输入性别为m或w,输入视力为y或n\n");
    for(i=0;i<10;i++)
    {
        scanf("%d %s %c",&student[i].num,&student[i].name,&student[i].sex);
        if(student[i].sex=='m')
            scanf("%c",&student[i].a.sight);
        else
            scanf("%f %f",&student[i].a.hw[0],&student[i].a.hw[1]);
    }
    printf("num        name          sex         sight/hw\n");
    for(i=0;i<10;i++)
    {
        if(student[i].sex=='m')
            printf("%d\t %s\t %c\t %c\n",student[i].num,student[i].name,student[i].sex,student[i].a.sight);
            else
            printf("%d\t %s\t %c\t %f\t %f\n",student[i].num,student[i].name,student[i].sex,student[i].a.hw[0],student[i].a.hw[1]);
    }
}
输入十个同学的信息并输出
若是男生则输入视力是否正常;
若是女生则输入身高体重;
我的这个程序输入男生时就结束了,无法继续输入;
求指教。
搜索更多相关主题的帖子: 信息 include 
2013-05-25 19:47
流年226
Rank: 1
等 级:新手上路
帖 子:37
专家分:7
注 册:2013-4-27
收藏
得分:0 
求助啊,哪位帮忙看看啊,
2013-05-25 21:53
YJ_Hao
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:215
专家分:609
注 册:2013-3-22
收藏
得分:0 
#include<stdio.h>
struct
{
    int num;
    char name[10];
    char sex;
    union
    {
        char sight;
        float hw[2];
    }a;
}student[10];
void main()
{
    int i=0;
    char ch;
    printf("输入性别为m或w,输入视力为y或n\n");
    for(i=0;i<10;i++)
    {
        scanf("%d %s %c",&student[i].num,student[i].name,&student[i].sex);
        while ( (ch=getchar()) != '\n')
            continue;
        if(student[i].sex=='m')
            scanf("%c",&student[i].a.sight);
        else
            scanf("%f %f",&student[i].a.hw[0],&student[i].a.hw[1]);
    }
    printf("num        name          sex         sight/hw\n");
    for(i=0;i<10;i++)
    {
        if(student[i].sex=='m')
            printf("%d\t %s\t %c\t %c\n",student[i].num,student[i].name,student[i].sex,student[i].a.sight);
            else
            printf("%d\t %s\t %c\t %f\t %f\n",student[i].num,student[i].name,student[i].sex,student[i].a.hw[0],student[i].a.hw[1]);
    }
}

加上红色的那句就可以完成输入了!
2013-05-26 06:42
流年226
Rank: 1
等 级:新手上路
帖 子:37
专家分:7
注 册:2013-4-27
收藏
得分:0 
貌似还是不行啊!
2013-05-26 09:51
雪狼MJ
Rank: 8Rank: 8
来 自:甘肃
等 级:蝙蝠侠
威 望:4
帖 子:267
专家分:853
注 册:2012-5-27
收藏
得分:4 
为了简化测试,我把学生人数缩减到了两个。

楼主的程序算法主题没什么问题,估计是输入方面的问题。你的源代码中的 scanf("%d %s %c",&student[i].num,&student[i].name,&student[i].sex);这个语句student[i].name之前是不需要取址符&的,因为它是个数组,本身就是地址。

样例输入和输出:
学号:2
姓名:dsa
性别(m或w):m
视力(y或n):y
学号:26
姓名:sda
性别(m或w):w
身高(米):1.65
体重(千克):56
num     name    sex     sight/hw
2        dsa     m       y
26       sda     w       1.65m   56.00kg
请按任意键继续. . .


这是代码:
程序代码:
#include<stdio.h>
struct
{
    int num;
    char name[10];
    char sex;
    union
    {
        char sight;
        float hw[2];
    }a;
}student[10];

int main()
{
    int i=0;
    for(i=0;i<2;i++)
    {
        printf("学号:");
        scanf("%d",&student[i].num);
        printf("姓名:");
        scanf("%s", student[i].name);
        printf("性别(m或w):");
        getchar();
        scanf("%c", &student[i].sex);
        if(student[i].sex=='m')
        {
            printf("视力(y或n):");
            getchar();
            scanf("%c",&student[i].a.sight);
        }
        else
        {
            printf("身高(米):");
            scanf("%f",&student[i].a.hw[0]);
            getchar();
            printf("体重(千克):");
            scanf("%f", &student[i].a.hw[1]);
        }
    }
    printf("num\tname\tsex\tsight/hw\n");
    for(i=0;i<2;i++)
    {
        if(student[i].sex=='m')
            printf("%d\t %s\t %c\t %c\n",student[i].num,student[i].name,student[i].sex,student[i].a.sight);
        else
            printf("%d\t %s\t %c\t %.2fm\t %.2fkg\n",student[i].num,student[i].name,student[i].sex,student[i].a.hw[0],student[i].a.hw[1]);
    }
   
    return 0;
}

 

Edsger Dijkstra:算法+数据结构=程序
2013-05-26 10:31
YJ_Hao
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:215
专家分:609
注 册:2013-3-22
收藏
得分:0 
多余了!

[ 本帖最后由 YJ_Hao 于 2013-5-26 10:36 编辑 ]
2013-05-26 10:35
逆风而前
Rank: 7Rank: 7Rank: 7
来 自:福建
等 级:黑侠
威 望:7
帖 子:193
专家分:567
注 册:2013-2-14
收藏
得分:6 
#include<stdio.h>
struct
{
    int num;
    char name[10];
    char sex;
    union
    {
        char sight;
        float hw[2];
    }a;
}student[10];
void main()
{
    int i=0;
    printf("输入性别为m或w,输入视力为y或n\n");
    for(i=0;i<10;i++)
    {
        printf("请分别输入学号、姓名、性别:\n");
        scanf("%d %s %c",&student[i].num,&student[i].name,&student[i].sex);
        printf("ok\n");
        if(student[i].sex=='m')
        {
            getchar();
            printf("请输入视力:\n");
            scanf("%c",&student[i].a.sight);
        }
        else
        {
            getchar();
            printf("请输入体重:\n");
            scanf("%f %f",&student[i].a.hw[0],&student[i].a.hw[1]);
        }
        getchar();
    }
    printf("num        name          sex         sight/hw\n");
    for(i=0;i<10;i++)
    {
        if(student[i].sex=='m')
            printf("%d\t %s\t %c\t %c\n",student[i].num,student[i].name,student[i].sex,student[i].a.sight);
            else
            printf("%d\t %s\t %c\t %f\t %f\n",student[i].num,student[i].name,student[i].sex,student[i].a.hw[0],student[i].a.hw[1]);
    }
}
2013-05-26 11:41
流年226
Rank: 1
等 级:新手上路
帖 子:37
专家分:7
注 册:2013-4-27
收藏
得分:0 
好的,我再看看,谢谢各位了。
2013-05-26 11:46
逆风而前
Rank: 7Rank: 7Rank: 7
来 自:福建
等 级:黑侠
威 望:7
帖 子:193
专家分:567
注 册:2013-2-14
收藏
得分:0 
printf("请分别输入学号、姓名、性别:\n");
        scanf("%d %s %c",&student[i].num,&student[i].name,&student[i].sex);
       printf("ok\n");《《--------你运行时把printf("ok\n");这句话删掉,它只是拿来检查用的。
其实是因为你没有加上getchar()
因为scanf会接收你上一次输入时留在缓冲区的回车符。
你得用getchar()接收回车符。
2013-05-26 11:47
逆风而前
Rank: 7Rank: 7Rank: 7
来 自:福建
等 级:黑侠
威 望:7
帖 子:193
专家分:567
注 册:2013-2-14
收藏
得分:0 
printf("请分别输入学号、姓名、性别:\n");
        scanf("%d %s %c",&student[i].num,&student[i].name,&student[i].sex);
       printf("ok\n");《《--------你运行时把printf("ok\n");这句话删掉,它只是拿来检查用的。
其实是因为你没有加上getchar()
因为scanf会接收你上一次输入时留在缓冲区的回车符。
你得用getchar()接收回车符。
2013-05-26 11:51
快速回复:信息的输入与输出
数据加载中...
 
   



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

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