| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1771 人关注过本帖
标题:gets()函数的问题.
只看楼主 加入收藏
mylzy159
Rank: 2
等 级:论坛游民
帖 子:61
专家分:23
注 册:2009-4-12
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
gets()函数的问题.
#include <stdio.h>
main()
{
    int n,i;
    float score[3],sum=0;
    char name[10],number[10];
    FILE *fp;
    if((fp=fopen("temp.txt","w"))==NULL)
    {
        printf("不能建立temp文件\n");
        exit(0);
    }
    fprintf(fp,"姓名-----学号-----成绩----------------------总分\n");
    for(n=0;n<2;n++,sum=0)
    {
        scanf("%s%s",name,number);//如果换上gets(name);
        for(i=0;i<3;i++)                    gets(number);输入第2个学生的时候就会跳过输入name..我想问这是为什么?
        {
            scanf("%f",&score[i]);
            sum+=score[i];
        }
        sum=sum/3.0;
        fprintf(fp,"%-10s%-10s%-10f%-10f%-10f%-10f\n",name,number,score[0],score[1],score[2],sum);
    }
    fclose(fp);
}

   
搜索更多相关主题的帖子: gets 函数 
2010-03-06 14:03
ldg628
Rank: 12Rank: 12Rank: 12
等 级:火箭侠
威 望:3
帖 子:526
专家分:3036
注 册:2009-6-23
收藏
得分:5 
        for(i=0;i<3;i++)
        {
            scanf("%f",&score[i]);
            sum+=score[i];
        }
        getchar(); --->把你敲的换行吃掉,gets检测到换行或者文件结束符EOF就会退出,之前的那个换行没有被吃掉,影响到了gets,so...
        sum=sum/3.0;
见意少用gets,它不检查缓冲的大小,会溢出的,是个危险的函数
2010-03-06 16:23
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:5 
这是键盘缓冲问题,建议使用gets之前清除键盘缓冲区!

★★★★★为人民服务★★★★★
2010-03-06 18:37
hanzhenddd
Rank: 5Rank: 5
等 级:职业侠客
帖 子:90
专家分:361
注 册:2010-3-4
收藏
得分:5 
gets 函数没有检测缓冲区大小的问题。。容易产生内存越界。。当年不少的黑客攻击都是利用此漏洞。。

可以考虑 使用 fgets()函数来替换。。 或者使用 scanf();

gets()  scanf() 后面记得跟一个getcha()来解决 2次输入造成的 \n被输入的问题。
2010-03-06 19:21
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1685
专家分:4252
注 册:2007-12-27
收藏
得分:5 
回复 楼主 mylzy159
问题的关键在于gets并不认为空格是一个分隔符,这就造成一旦使用gets,它就会把一直到行末的内容都吃进来,而不在乎中间是否有空格。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2010-03-06 19:57
快速回复:gets()函数的问题.
数据加载中...
 
   



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

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