| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 650 人关注过本帖
标题:scanf无法换行怎么解??
只看楼主 加入收藏
·charles
Rank: 2
等 级:论坛游民
帖 子:67
专家分:48
注 册:2015-3-23
结帖率:80%
收藏
已结贴  问题点数:10 回复次数:5 
scanf无法换行怎么解??
#include "stdio.h"
#include "string.h"
int main()
{
    struct stu
    {
        int sno;
        char name[10];
        char sex;
        float score;
    }student[5];
   
    int i=0,count;
    float sum=0;
    while(i<5)
    {
        printf("请输入%d个学生学号:\n",i+1);
        scanf("%d",&student[i].sno);                         //scanf会读回车进去,无法换行?
        printf("请输入学生姓名:\n");
        gets(student[i].name);
        printf("请输入学生性别:\n");
        scanf("%c",&student[i].sex);
        printf("请输入学生成绩:\n");
        scanf("%f",&student[i].score);
        if(student[i].score<60.0)
            count++;
        sum=sum+student[i].score;
        i++;
    }
    printf("学号\t\t姓名\t\t性别\t\t分数\n");
    for(i=0;i<5;i++)
        printf("%d\t\t%s\t\t%c\t\t%f\n",student[i].sno,student[i].name,student[i].sex,student[i].score);
    printf("不及格人数%d\t平均成绩%f\n",count,sum/5);
    return 0;
}
搜索更多相关主题的帖子: count include 姓名 
2015-06-18 00:51
hjx1120
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:李掌柜
等 级:贵宾
威 望:41
帖 子:1314
专家分:6927
注 册:2008-1-3
收藏
得分:10 
1 bug_a  缓冲区问题, ‘\n’没有做过滤处理
解决方案:
while(getchar()!= '\n')
            continue;

2 bug_b  字符空间声明   char sex;
解决方案:
char sex[10];

PS:  float sum=0; 写成float sum=0.0安全一点,  

----------------------------------------------
#include "stdio.h"
#include "string.h"
int main()
{
    struct stu
    {
        int sno;
        char name[10];
        char sex[10];
        float score;
    }student[5];
   
    int i=0,count;
    float sum=0.0;
    while(i<5)
    {
        printf("请输入%d个学生学号:\n",i+1);
        scanf("%d",&student[i].sno);                         //scanf会读回车进去,无法换行?
        while(getchar()!= '\n')
            continue;
        printf("请输入学生姓名:\n");
        gets(student[i].name);
        printf("请输入学生性别:\n");
        scanf("%c",&student[i].sex);
        while(getchar()!= '\n')
            continue;
        printf("请输入学生成绩:\n");
        scanf("%f",&student[i].score);
        while(getchar()!= '\n')
            continue;
        if(student[i].score<60.0)
            count++;
        sum=sum+student[i].score;
        i++;
    }
    printf("学号\t\t姓名\t\t性别\t\t分数\n");
    for(i=0;i<5;i++)
        printf("%d\t\t%s\t\t%c\t\t%f\n",student[i].sno,student[i].name,student[i].sex,student[i].score);
    printf("不及格人数%d\t平均成绩%f\n",count,sum/5);
    return 0;
}
2015-06-18 01:14
hjx1120
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:李掌柜
等 级:贵宾
威 望:41
帖 子:1314
专家分:6927
注 册:2008-1-3
收藏
得分:0 

 for(i=0;i<5;i++)
        printf("%d\t\t%s\t\t%c\t\t%f\n",student[i].sno,student[i].name,student[i].sex,student[i].score);
    printf("不及格人数%d\t平均成绩%f\n",count,sum/5);
    return 0;
这段代码刚没细看,又发现了几个bug;

3 .bug_c 声明 int count; count没有初值
-----------------------------------------------------------------------------------------------------------
完整代码:
#include "stdio.h"
#include "string.h"
int main()
{
    struct stu
    {
        int sno;
        char name[10];
        char sex[10];
        float score;
    }student[5];
   
    int i=0,count=0;
    float sum=0;
    while(i<5)
    {
        printf("请输入%d个学生学号:\n",i+1);
        scanf("%d",&student[i].sno);                         //scanf会读回车进去,无法换行?
        while(getchar()!= '\n')
            continue;
        printf("请输入学生姓名:\n");
        gets(student[i].name);
        printf("请输入学生性别:\n");
        gets(student[i].sex);
        printf("请输入学生成绩:\n");
        scanf("%f",&student[i].score);
        while(getchar()!= '\n')
            continue;
        if(student[i].score<60.0)
            count++;
        sum=sum+student[i].score;
        i++;
    }
    printf("学号\t\t姓名\t\t性别\t\t分数\n");
    for(i=0;i<5;i++)
        printf("%d\t\t%s\t\t%s\t\t%f\n",student[i].sno,student[i].name,student[i].sex,student[i].score);
    printf("不及格人数%d\t平均成绩%f\n",count,sum/5);
    return 0;
}

2015-06-18 01:34
·charles
Rank: 2
等 级:论坛游民
帖 子:67
专家分:48
注 册:2015-3-23
收藏
得分:0 
回复 2楼 hjx1120
printf("请输入%d个学生学号:\n",i+1);
        scanf("%d",&student[i].sno);  
输入student[i].sno之后的回车在键盘缓冲区。下一步的gets()读取了回车,是这个意思吗??
如果是这样,gets就不能读入姓名了吧。

编程!编程!!编程!!!
重要的事情说三遍!!!!
2015-06-18 01:41
·charles
Rank: 2
等 级:论坛游民
帖 子:67
专家分:48
注 册:2015-3-23
收藏
得分:0 
回复 3楼 hjx1120
bug_c已发现,bug_b是打算输入一个字符表示性别

3ku,大神!!!

编程!编程!!编程!!!
重要的事情说三遍!!!!
2015-06-18 01:43
hjx1120
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:李掌柜
等 级:贵宾
威 望:41
帖 子:1314
专家分:6927
注 册:2008-1-3
收藏
得分:0 
以下是引用·charles在2015-6-18 01:43:18的发言:

bug_c已发现,bug_b是打算输入一个字符表示性别

3ku,大神!!!

我是一个小白
2015-06-18 01:46
快速回复:scanf无法换行怎么解??
数据加载中...
 
   



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

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