VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 316|回复: 12

[求助] 构造数据

[复制链接]
59_avatar_middle
在线会员 chenhaiyuan 发表于 2018-4-12 13:43:07 | 显示全部楼层 |阅读模式
3驿站币
为什么这里平均值得出来是0??有点懵,用的是visual studio 2013
#include<stdio.h>
#include<stdlib.h>
struct employee
{
        char name[20];
        char age;
        char sex;
        float salary;
};
struct employee input(int i)   
{
        struct employee emp[4];   
        char character[20], ch;
        printf("name is :");
        gets_s(emp[i].name,20);      
        printf("age is :");
        gets_s(character,20);
        emp[i].age = atoi(character);         
        printf("sex is :");
        emp[i].sex = getchar();
        ch = getchar();
        printf("salary is :");
        gets_s(character,20);
        emp[i].salary = atof(character);           
        return(emp[i]);                     
}
void output(struct employee emp)
{
        printf("%20s  %5d    %4c     %10.2f\n", emp.name, emp.age, emp.sex, emp.salary);
}
int main()
{
        int i, ave, sum = 0;
        struct employee emp[4];
        for (i = 0; i < 4; i++)
        {
                emp[i]=input(i);       
                sum = sum+emp[i].salary;
        }
        printf("name              age            sex           salary\n");
        for (i = 0; i < 4;i++)
                output(emp[i]);
        ave = sum / 4;
        printf("%f", ave);
        system("pause");
        return 0;
}

最佳答案

查看完整内容

代码改成如下是比较正确而且合理的:




上一篇:帮帮我看,后天就是vc的考试了
下一篇:关于一些DLL注入的问题

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

51_avatar_middle
online_admins Syc 发表于 2018-4-12 13:43:08 | 显示全部楼层
代码改成如下是比较正确而且合理的:
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. struct employee
  4. {
  5.         char name[20];
  6.         char age;
  7.         char sex;
  8.         float salary;
  9. };

  10. void input(struct employee* p_emp)
  11. {
  12.         char character[20], ch;
  13.         printf("name is :");
  14.         gets_s(p_emp->name, 20);
  15.         printf("age is :");
  16.         gets_s(character, 20);
  17.         p_emp->age = atoi(character);
  18.         printf("sex is :");
  19.         p_emp->sex = getchar();
  20.         ch = getchar();
  21.         printf("salary is :");
  22.         gets_s(character, 20);
  23.         p_emp->salary = atof(character);
  24. }
  25. void output(struct employee* p_emp)
  26. {
  27.         printf("%20s  %5d    %4c     %10.2f\n", p_emp->name, p_emp->age, p_emp->sex, p_emp->salary);
  28. }
  29. int main()
  30. {
  31.         int i, ave, sum = 0;
  32.         struct employee emp[4];
  33.         for (i = 0; i < 4; i++)
  34.         {
  35.                 input(&emp[i]);
  36.                 sum = sum + emp[i].salary;
  37.         }
  38.         printf("name              age            sex           salary\n");
  39.         for (i = 0; i < 4; i++)
  40.                 output(&emp[i]);
  41.         ave = sum / 4;
  42.         printf("%d", ave);
  43.         system("pause");
  44.         return 0;
  45. }
复制代码

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

51_avatar_middle
online_admins Syc 发表于 2018-4-12 13:53:45 | 显示全部楼层
input 函数内部定义的 struct employee emp[4]; 是个局部变量,之后你直接 return(emp[i]); 返回了。肯定不行的,函数内部的局部变量在跳出函数的作用域之后很可能被释放了,所以这时候你再返回一个局部变量是个非常危险的行为,也是很多新手都会范的错误。应该避免!

点评

大佬不是很懂,返回值赋值给主函数的的emp,不会被保留下来吗?  发表于 2018-4-12 16:32

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

59_avatar_middle
ico_lz  楼主| chenhaiyuan 发表于 2018-4-12 16:36:15 | 显示全部楼层
Syc 发表于 2018-4-12 14:42
代码改成如下是比较正确而且合理的:

平均数求出来了,但是那什么数据输出出现了问题,在输出的数据除了salary项后多了一些问好
比如:年龄:12??   工资:2400??

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

51_avatar_middle
online_admins Syc 发表于 2018-4-12 16:37:19 | 显示全部楼层
chenhaiyuan 发表于 2018-4-12 16:36
平均数求出来了,但是那什么数据输出出现了问题,在输出的数据除了salary项后多了一些问好
比如:年龄: ...

ave 是 int 类型,你非要用 %f 来打印能行吗?

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

59_avatar_middle
ico_lz  楼主| chenhaiyuan 发表于 2018-4-12 16:41:06 | 显示全部楼层
Syc 发表于 2018-4-12 16:37
ave 是 int 类型,你非要用 %f 来打印能行吗?

我是说你的那个代码。

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

51_avatar_middle
online_admins Syc 发表于 2018-4-12 16:44:31 | 显示全部楼层
chenhaiyuan 发表于 2018-4-12 16:41
我是说你的那个代码。

构造数据
没看出什么问题啊

点评

版本问题吗?那我就不纠结了。在input函数用return返回赋值给主函数的 struct employee emp[4];是赋值前就被释放的意思,导致无法求平均值?  发表于 2018-4-12 16:49

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

51_avatar_middle
online_admins Syc 发表于 2018-4-12 16:55:00 | 显示全部楼层
Syc 发表于 2018-4-12 16:44
没看出什么问题啊

他是局部变量,超过函数的作用域就释放了,之后的任何操作都是危险的。

点评

那不用return值返回,直接参数带进去就不会出现比较危险的情况/  发表于 2018-4-12 16:57

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

51_avatar_middle
online_admins Syc 发表于 2018-4-12 17:20:58 | 显示全部楼层
Syc 发表于 2018-4-12 16:55
他是局部变量,超过函数的作用域就释放了,之后的任何操作都是危险的。

肯定不会啊,因为参数的内存在函数外面已经申请好了,函数内部直接往里面放东西就行

点评

好的,谢谢。。  发表于 2018-4-12 17:22

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /1 下一条

QQ
QQ在线咨询
联系电话
13591366679
手机扫一扫 关注本站精彩内容
wxqrcode

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2018-8-20 23:19

Powered by Discuz! X3.4

© 2009-2018 cctry.com

快速回复 返回顶部 返回列表