| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 528 人关注过本帖
标题:能帮我看一下哪错了么?谢谢
只看楼主 加入收藏
Vsnow
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:124
专家分:145
注 册:2015-1-3
结帖率:95%
收藏
已结贴  问题点数:12 回复次数:7 
能帮我看一下哪错了么?谢谢
/*设计一个能够记录公司员工工资的数据结构(比如包括:员工号,姓名,基本工资,补贴金额,奖励金额,扣税,实发工资等),
其中实发工资=基本工资+补贴金额+奖励金额-扣税。新增:能输入10个员工工资数据并计算出实发工资;查找:输入员工的员工号,
无论是否查找成功,可选择继续查找或退出。*/
#include <stdio.h>
#define N 5
#define M 10
struct worker
{  
    char name[20];
    int num;
    double price1,price2,price3,price4,price5;
};
struct worker wor[N];
void get(worker wor[N]);

void main()
{   
    int i,t;
    printf("请按下列格式输入员工信息:\n");
    printf("姓名    员工号    基本工资    补贴金额    奖励金额    扣税\n");
    for(i=0;i<N;i++)
    {
        scanf("%20s%10d%20lf%20lf%20lf%20lf\n",&wor[i].name,&wor[i].num,&wor[i].price1,&wor[i].price2,&wor[i].price3,&wor[i].price4);
    }
      printf("-------------------------------------------\n");
      printf("----整理之后的员工信息如下:----\n");
      printf("姓名    员工号    基本工资    补贴金额    奖励金额    扣税    实发工资\n");
     for(i=0;i<N;i++)
    {
         wor[i].price5=wor[i].price1+wor[i].price2+wor[i].price3-wor[i].price4;
        printf("%-20s%-6d%-20.2lf%-20.2lf%-20.2lf%-20.2lf%-20.2lf\n",wor[i].name,wor[i].num,wor[i].price1,
                wor[i].price2,wor[i].price3,wor[i].price4,wor[i].price5);
    }
   for(i=0;i<M;i++)
   {    printf("-----查找输入1,退出程序输入0-------\n");
        scanf("%d",&t);
        if(t==1)
            {
            get(wor);
            }
        if(t==0) break;
   }
}
void get(worker wor[N])
{
    int i,x;
    printf("请输入您需要查找的员工号:");
    scanf("%d",&x);
    for(i=0;i<N;i++)
    {
        if(wor[i].num==x)
        {
            printf("姓名:%-20s员工号:%-6d基本工资:%-20.2lf补贴金额:%-20.2lf奖励金额:%-20.2lf 扣税:%-20.2lf实发工资:%-20.2lf\n",
                        wor[i].name,wor[i].num,wor[i].price1,wor[i].price2,wor[i].price3,wor[i].price4,wor[i].price5);
        }
            
    }
}
搜索更多相关主题的帖子: include double 记录 姓名 
2015-03-29 18:54
n0noper
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:39
专家分:159
注 册:2015-3-21
收藏
得分:2 

输入那一句,看看下边这一句,你错在哪里:
scanf("%20s%10d%20lf%20lf%20lf%20lf",wor[i].name,&wor[i].num,&wor[i].price1,&wor[i].price2,&wor[i].price3,&wor[i].price4);

还有,你的判断是否输入0或1来决定程序是否结束之前,不妨先用fflush(stdin); 把缓冲区中的"剩饭"给吃掉,那样避免了不必要的麻烦。

不骄不躁,不卑不亢;虚怀若谷,宠辱不惊。
2015-03-29 19:59
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:1 
没法看,太长,也不愿编译调试。

能编个毛线衣吗?
2015-03-29 20:20
Vsnow
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:124
专家分:145
注 册:2015-1-3
收藏
得分:0 
回复 2楼 n0noper
我用的是scanf,后面不需要\n,因为pro[i].name是字符串,不需要用&
可是你说的那个fflush(stdin)不知道如何正确的使用在程序中适当位置
谢谢
2015-03-29 21:27
n0noper
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:39
专家分:159
注 册:2015-3-21
收藏
得分:2 
回复 4楼 Vsnow
你在进行下一次输入之前,有可能输入缓冲区中有一些你不期望的输入(比如上次不正确的输入,回车等),就用fflush(stdin)相当于是刷新清空一下。
例如:
你上边一大堆东西输入之后,最后有个回车,然后有可能(有可能哈)就让你的输入1.0的地方取到了,然后他就自作主张给操作了。你自己慢慢写点验证程序,领会一下,没啥东西可说,自己试试。

不骄不躁,不卑不亢;虚怀若谷,宠辱不惊。
2015-03-30 08:00
heso
Rank: 2
等 级:论坛游民
帖 子:20
专家分:39
注 册:2015-3-15
收藏
得分:4 
根据楼主提供代码,本人修改如下
#include <stdio.h>
#define N 5
#define M 10
struct worker
{  
    char name[20];
    int num;
    double price1,price2,price3,price4,price5;
};
struct worker wor[N];
void get(struct worker wor[N])//结构体类型 加上 struct
{
    int i,x;
    printf("请输入您需要查找的员工号:");
    scanf("%d",&x);
    for(i=0;i<N;i++)
    {
        if(wor[i].num==x)
        {
            printf("姓名:%-20s员工号:%-6d基本工资:%-20.2lf补贴金额:%-20.2lf奖励金额:%-20.2lf 扣税:%-20.2lf实发工资:%-20.2lf\n",
                        wor[i].name,wor[i].num,wor[i].price1,wor[i].price2,wor[i].price3,wor[i].price4,wor[i].price5);
        }
            
    }
}
void main()
{   
    int i,t;
    printf("请按下列格式输入员工信息:\n");
    printf("姓名    员工号    基本工资    补贴金额    奖励金额    扣税\n");
    for(i=0;i<N;i++)
    {
        scanf("%20s%10d%20lf%20lf%20lf%20lf\n",wor[i].name,&wor[i].num,&wor[i].price1,&wor[i].price2,&wor[i].price3,&wor[i].price4);//去掉第一个.name前的取地址符
    }
      printf("-------------------------------------------\n");
      printf("----整理之后的员工信息如下:----\n");
      printf("姓名    员工号    基本工资    补贴金额    奖励金额    扣税    实发工资\n");
     for(i=0;i<N;i++)
    {
         wor[i].price5=wor[i].price1+wor[i].price2+wor[i].price3-wor[i].price4;
        printf("%-20s%-6d%-20.2lf%-20.2lf%-20.2lf%-20.2lf%-20.2lf\n",wor[i].name,wor[i].num,wor[i].price1,
                wor[i].price2,wor[i].price3,wor[i].price4,wor[i].price5);
    }
   for(i=0;i<M;i++)
   {    printf("-----查找输入1,退出程序输入0-------\n");
        scanf("%d",&t);
        if(t==1)
            {
            get(wor);
            }
        if(t==0) break;
   }
}
望一起交流、
2015-03-30 09:15
chen441107
Rank: 2
等 级:论坛游民
帖 子:3
专家分:19
注 册:2015-3-27
收藏
得分:3 
回复 楼主 Vsnow
大致看了下,有以下几个方面的问题:
1、void get(worker wor[N]);这个函数参数定义应该是(struct worker *wor),你写成struct worker wor[N],编译没得问题,但这个传的是地址,你可以考虑下。
2、for(i=0;i<M;i++)
   {    printf("-----查找输入1,退出程序输入0-------\n");
        scanf("%d",&t);
        if(t==1)
            {
            get(wor);
            }
        if(t==0) break;
   }
    这个循环根本达不到你的要求,修改成while(1)试试,如果你要限定次数,可以添加个最大循环标志。
3、程序中还有许多小的问题,比如 scanf("%20s%10d%20lf%20lf%20lf%20lf\n",&wor[i].name,&wor[i].num,&wor[i].price1,&wor[i].price2,&wor[i].price3,&wor[i].price4);输入格式后面添加“\n”这个地方就比较欠缺,你自己运行中会发现问题的。
4、其它程序中的问题,希望你自己能够好好调试下。
2015-03-30 09:57
凡尘缘
Rank: 1
等 级:新手上路
帖 子:9
专家分:5
注 册:2015-3-25
收藏
得分:0 
2015-03-30 10:15
快速回复:能帮我看一下哪错了么?谢谢
数据加载中...
 
   



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

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