| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 874 人关注过本帖
标题:请问此结构体输入程序错在哪里?
只看楼主 加入收藏
紫ing~
Rank: 4
来 自:中科大
等 级:业余侠客
帖 子:103
专家分:273
注 册:2008-11-25
结帖率:83.33%
收藏
已结贴  问题点数:20 回复次数:12 
请问此结构体输入程序错在哪里?
程序代码:
#include "stdio.h" 
#include "string.h" 
#include "stdlib.h" 

struct score                
{

 char name[10];

 float math,eng;      
}; 


main() 
{ struct score s[5]; int i; 
  for(i=0;i<5;i++) 
  {  
   printf("maths english:"); 
   scanf("%f%f",&s[i].math,&s[i].eng); 
  } 
} 

 


报错如下
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: 结构体 输入 
2009-08-02 15:05
紫ing~
Rank: 4
来 自:中科大
等 级:业余侠客
帖 子:103
专家分:273
注 册:2008-11-25
收藏
得分:0 
就是一次输入后,回车就报错,我本来是想输入后回车进入for循环接受第二次输入的。。。。
用的是vc

唯有天道恒在,往复循环,不曾更改。。。
2009-08-02 15:06
leeco
Rank: 4
等 级:贵宾
威 望:10
帖 子:1029
专家分:177
注 册:2007-5-10
收藏
得分:0 
没错,你重新生成一下
2009-08-02 15:22
紫ing~
Rank: 4
来 自:中科大
等 级:业余侠客
帖 子:103
专家分:273
注 册:2008-11-25
收藏
得分:0 
可能我电脑有问题吧,其它地方问别人都没有错,orz。。。谢谢ls了

唯有天道恒在,往复循环,不曾更改。。。
2009-08-02 15:29
紫ing~
Rank: 4
来 自:中科大
等 级:业余侠客
帖 子:103
专家分:273
注 册:2008-11-25
收藏
得分:0 
还有一个问题,为什么接受输入时是这样呢?(附图)
程序代码:
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
struct score               
{char name[10]; 

 float math,eng;     
};

main()
{ struct score s[5]; int i; double avg[5];
  for(i=0;i<5;i++)
    {
     printf("name:");
     gets(s[i].name);
     printf("maths english:");
     scanf("%f%f",&s[i].math,&s[i].eng);
    }
  

 
  for(i=0;i<5;i++)
   avg[i]=(s[i].math+s[i].eng)/2;
  for(i=0;i<5;i++)
   { 
       printf("%3.1f\t",avg[i]);
   }
  
    
}


程序.JPG (107.08 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册

唯有天道恒在,往复循环,不曾更改。。。
2009-08-02 15:42
紫ing~
Rank: 4
来 自:中科大
等 级:业余侠客
帖 子:103
专家分:273
注 册:2008-11-25
收藏
得分:0 
第二次为什么就不接受s[i].name的输入了呢?

唯有天道恒在,往复循环,不曾更改。。。
2009-08-02 15:43
flyue
Rank: 10Rank: 10Rank: 10
来 自:江南西道
等 级:贵宾
威 望:19
帖 子:3465
专家分:1563
注 册:2006-6-20
收藏
得分:0 
scanf如果乱输入会崩

ps:柳梦璃皮肤的输入法 哪搞的?

[[it] 本帖最后由 flyue 于 2009-8-2 15:46 编辑 [/it]]

天之道,损有余而补不足.人之道则不然,损不足以奉有余.孰能有余以奉天下,唯有道者.
2009-08-02 15:45
prankmoon
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:161
专家分:921
注 册:2009-7-21
收藏
得分:20 
下面是我修改后的代码,编码风格有些和你不一样:
程序代码:
/**
*      file_name:      test.c
*    description:
*
*        version:      1.0
*        created:      17:14 2009-8-2
*       revision:      none
*       compiler:      VC6.0
*
*         author:      prankmoon@*        company:
*/

#include <stdio.h>
#include <stdlib.h>

struct score
{
    char name[20];          // 更长了,因为我一不小心胡乱按键盘就溢出了
    float math;
    float eng;     
};

int main(void)
{
    int i;
    float avg[5] = {0};     // 改成了float型,double在这里并不能提高精度
    struct score s[5];
    
    for(i=0; i<5; i++)
    {
        printf("name: ");
        
        /* 增加下面这一行,但有其缺陷,具体的你可以参考这篇文章:
           http://blog.*/
        fflush(stdin);
        gets(s[i].name);    // gets函数已经不推荐使用了,详见《C专家编程》P42
        printf("maths english: ");
        
        /* 输入的参数之间还是用空格或者逗号分开为佳 */
        scanf("%f %f",&(s[i].math), &(s[i].eng));
    }

    for(i=0; i<5; i++)
    {
        avg[i] = (s[i].math + s[i].eng) / 2;
        printf("%3.1f\t\n", avg[i]); 
    }   

    return 0;
}

输入:
name: hulala
maths english: 12 123
name: asdf
maths english: 123 23
name: afd
maths english: 231 2423
name: sadfads
maths english: 1231 3423
name: fasdfaf
maths english: 123 543

输出:
67.5
73.0
1327.0
2327.0
333.0

希望能够对你有所帮助。

[[it] 本帖最后由 prankmoon 于 2009-8-2 17:48 编辑 [/it]]
收到的鲜花
  • 紫ing~2009-08-02 22:02 送鲜花  5朵  
2009-08-02 17:18
feixiangmada
Rank: 1
等 级:新手上路
帖 子:6
专家分:6
注 册:2009-8-2
收藏
得分:0 
你说的是什么意思?接受输入的样子很正确啊,先显示name然后运行get输入再显示math English:再运行scanf输入?你想要啥样的?
2009-08-02 17:44
紫ing~
Rank: 4
来 自:中科大
等 级:业余侠客
帖 子:103
专家分:273
注 册:2008-11-25
收藏
得分:0 
回复 8楼 prankmoon
哥们太感谢了,我学C不久,很多地方都不是很清楚。您能为我这么详细的讲解,真让我感激不尽,再次感谢~~
还有,再请问你一下,这个程序现在符合要求,我试了一下主要就是fflush(stdin)函数的作用,这个函数是不是就能够解决版主说的scanf乱崩的问题?

唯有天道恒在,往复循环,不曾更改。。。
2009-08-02 22:02
快速回复:请问此结构体输入程序错在哪里?
数据加载中...
 
   



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

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