鱼C论坛

 找回密码
 立即注册
查看: 1576|回复: 2

[已解决]结构体入门:工资表问题

[复制链接]
发表于 2020-5-28 16:52:47 | 显示全部楼层 |阅读模式
5鱼币
问题:输入一个正整数n(3<=n<=10),再输入n个雇员的信息,输出每人的姓名和实发工资(基本工资+浮动工资支出)
  1. #include<stdio.h>
  2. void main()
  3. {
  4.         struct worker {
  5.                 char name[10];
  6.                 float jbgz;
  7.                 float fdgz;
  8.                 float  zc;
  9.                 float sfgz;
  10.         };
  11.        
  12.         int i, n;
  13.         struct worker workers[n];
  14.         printf("请输入人数:");
  15.         scanf("%d", &n);
  16.         for (i = 0;i < n;i++) {
  17.                 scanf("%s %f %f %f", workers[i].name, &workers[i].jbgz, &workers[i].fdgz, &workers[i].zc);
  18.         }
  19.         for (i = 0;i < n;i++) {
  20.                 workers[i].sfgz = workers[i].jbgz + workers[i].fdgz - workers[i].zc;
  21.                 printf("%s实发数 %.2f\n", workers[i].name, workers[i].sfgz);
  22.         }
  23. }
复制代码

用DEV运行后,没输出结果,VS直接在定义结构体数组时报错有没有大佬帮忙看看是啥问题啊

输入:
zhao 240 400 75

qian 360 120 50

sun 560 150 80
最佳答案
2020-5-28 16:52:48
两处错误。
第一处,定义结构体数组的时候还没有给n赋值。。。。
第二处,第一个for循环,scanf输入的时候先给%s赋值,后面几个就没有值了,因为%s是遇到回车才认为结束
第一个问题的解决方法,把定义结构体数组放到给n赋值之后
第二个问题,两种方法:1、把%s放到最后赋值,2、把%s单独拿出来

另外用scanf进行多个变量输入赋值的时候,格式化字符之间最好不要有任何字符。有任何字符都可能因你的输入差异导致出错,例如你的这个scanf中各个%f之间最好不要有空格。
  1. #include<stdio.h>
  2. void main()
  3. {
  4.     struct worker {
  5.         char name[10];
  6.         float jbgz;
  7.         float fdgz;
  8.         float  zc;
  9.         float sfgz;
  10.     };
  11.    
  12.     int i, n;
  13.     printf("请输入人数:");
  14.     scanf("%d", &n);
  15.     struct worker workers[n];
  16.     for (i = 0;i < n;i++) {
  17.         scanf("%f%f%f%s", &workers[i].jbgz, &workers[i].fdgz, &workers[i].zc,workers[i].name);
  18.         //scanf("%s",workers[i].name);
  19.         //scanf("%f%f%f", &workers[i].jbgz, &workers[i].fdgz, &workers[i].zc);
  20.         
  21.     }
  22.     for (i = 0;i < n;i++) {
  23.         workers[i].sfgz = workers[i].jbgz + workers[i].fdgz - workers[i].zc;
  24.         printf("%s实发数 %.2f\n", workers[i].name, workers[i].sfgz);
  25.     }
  26. }
复制代码

最佳答案

查看完整内容

两处错误。 第一处,定义结构体数组的时候还没有给n赋值。。。。 第二处,第一个for循环,scanf输入的时候先给%s赋值,后面几个就没有值了,因为%s是遇到回车才认为结束 第一个问题的解决方法,把定义结构体数组放到给n赋值之后 第二个问题,两种方法:1、把%s放到最后赋值,2、把%s单独拿出来 另外用scanf进行多个变量输入赋值的时候,格式化字符之间最好不要有任何字符。有任何字符都可能因你的输入差异导致出错,例如你 ...
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-5-28 16:52:48 | 显示全部楼层    本楼为最佳答案   
两处错误。
第一处,定义结构体数组的时候还没有给n赋值。。。。
第二处,第一个for循环,scanf输入的时候先给%s赋值,后面几个就没有值了,因为%s是遇到回车才认为结束
第一个问题的解决方法,把定义结构体数组放到给n赋值之后
第二个问题,两种方法:1、把%s放到最后赋值,2、把%s单独拿出来

另外用scanf进行多个变量输入赋值的时候,格式化字符之间最好不要有任何字符。有任何字符都可能因你的输入差异导致出错,例如你的这个scanf中各个%f之间最好不要有空格。
  1. #include<stdio.h>
  2. void main()
  3. {
  4.     struct worker {
  5.         char name[10];
  6.         float jbgz;
  7.         float fdgz;
  8.         float  zc;
  9.         float sfgz;
  10.     };
  11.    
  12.     int i, n;
  13.     printf("请输入人数:");
  14.     scanf("%d", &n);
  15.     struct worker workers[n];
  16.     for (i = 0;i < n;i++) {
  17.         scanf("%f%f%f%s", &workers[i].jbgz, &workers[i].fdgz, &workers[i].zc,workers[i].name);
  18.         //scanf("%s",workers[i].name);
  19.         //scanf("%f%f%f", &workers[i].jbgz, &workers[i].fdgz, &workers[i].zc);
  20.         
  21.     }
  22.     for (i = 0;i < n;i++) {
  23.         workers[i].sfgz = workers[i].jbgz + workers[i].fdgz - workers[i].zc;
  24.         printf("%s实发数 %.2f\n", workers[i].name, workers[i].sfgz);
  25.     }
  26. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-5-28 17:37:05 | 显示全部楼层
sunrise085 发表于 2020-5-28 16:52
两处错误。
第一处,定义结构体数组的时候还没有给n赋值。。。。
第二处,第一个for循环,scanf输入的时 ...

嗯嗯,非常感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-1 07:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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