张小艾 发表于 2020-5-28 16:52:47

结构体入门:工资表问题

问题:输入一个正整数n(3<=n<=10),再输入n个雇员的信息,输出每人的姓名和实发工资(基本工资+浮动工资支出)
#include<stdio.h>
void main()
{
        struct worker {
                char name;
                float jbgz;
                float fdgz;
                floatzc;
                float sfgz;
        };
       
        int i, n;
        struct worker workers;
        printf("请输入人数:");
        scanf("%d", &n);
        for (i = 0;i < n;i++) {
                scanf("%s %f %f %f", workers.name, &workers.jbgz, &workers.fdgz, &workers.zc);
        }
        for (i = 0;i < n;i++) {
                workers.sfgz = workers.jbgz + workers.fdgz - workers.zc;
                printf("%s实发数 %.2f\n", workers.name, workers.sfgz);
        }
}
用DEV运行后,没输出结果,VS直接在定义结构体数组时报错有没有大佬帮忙看看是啥问题啊{:10_266:}

输入:
zhao 240 400 75

qian 360 120 50

sun 560 150 80

sunrise085 发表于 2020-5-28 16:52:48

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

另外用scanf进行多个变量输入赋值的时候,格式化字符之间最好不要有任何字符。有任何字符都可能因你的输入差异导致出错,例如你的这个scanf中各个%f之间最好不要有空格。
#include<stdio.h>
void main()
{
    struct worker {
      char name;
      float jbgz;
      float fdgz;
      floatzc;
      float sfgz;
    };
   
    int i, n;
    printf("请输入人数:");
    scanf("%d", &n);
    struct worker workers;
    for (i = 0;i < n;i++) {
      scanf("%f%f%f%s", &workers.jbgz, &workers.fdgz, &workers.zc,workers.name);
      //scanf("%s",workers.name);
      //scanf("%f%f%f", &workers.jbgz, &workers.fdgz, &workers.zc);
      
    }
    for (i = 0;i < n;i++) {
      workers.sfgz = workers.jbgz + workers.fdgz - workers.zc;
      printf("%s实发数 %.2f\n", workers.name, workers.sfgz);
    }
}

张小艾 发表于 2020-5-28 17:37:05

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

嗯嗯,非常感谢
页: [1]
查看完整版本: 结构体入门:工资表问题