鱼C论坛

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

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

[复制链接]
发表于 2020-5-28 16:52:47 | 显示全部楼层 |阅读模式
5鱼币
问题:输入一个正整数n(3<=n<=10),再输入n个雇员的信息,输出每人的姓名和实发工资(基本工资+浮动工资支出)
#include<stdio.h>
void main()
{
        struct worker {
                char name[10];
                float jbgz;
                float fdgz;
                float  zc;
                float sfgz;
        };
        
        int i, n;
        struct worker workers[n];
        printf("请输入人数:");
        scanf("%d", &n);
        for (i = 0;i < n;i++) {
                scanf("%s %f %f %f", workers[i].name, &workers[i].jbgz, &workers[i].fdgz, &workers[i].zc);
        }
        for (i = 0;i < n;i++) {
                workers[i].sfgz = workers[i].jbgz + workers[i].fdgz - workers[i].zc;
                printf("%s实发数 %.2f\n", workers[i].name, workers[i].sfgz);
        }
}
用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之间最好不要有空格。
#include<stdio.h>
void main()
{
    struct worker {
        char name[10];
        float jbgz;
        float fdgz;
        float  zc;
        float sfgz;
    };
    
    int i, n;
    printf("请输入人数:");
    scanf("%d", &n);
    struct worker workers[n];
    for (i = 0;i < n;i++) {
        scanf("%f%f%f%s", &workers[i].jbgz, &workers[i].fdgz, &workers[i].zc,workers[i].name);
        //scanf("%s",workers[i].name);
        //scanf("%f%f%f", &workers[i].jbgz, &workers[i].fdgz, &workers[i].zc);
        
    }
    for (i = 0;i < n;i++) {
        workers[i].sfgz = workers[i].jbgz + workers[i].fdgz - workers[i].zc;
        printf("%s实发数 %.2f\n", workers[i].name, workers[i].sfgz);
    }
}

最佳答案

查看完整内容

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

使用道具 举报

发表于 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[10];
        float jbgz;
        float fdgz;
        float  zc;
        float sfgz;
    };
    
    int i, n;
    printf("请输入人数:");
    scanf("%d", &n);
    struct worker workers[n];
    for (i = 0;i < n;i++) {
        scanf("%f%f%f%s", &workers[i].jbgz, &workers[i].fdgz, &workers[i].zc,workers[i].name);
        //scanf("%s",workers[i].name);
        //scanf("%f%f%f", &workers[i].jbgz, &workers[i].fdgz, &workers[i].zc);
        
    }
    for (i = 0;i < n;i++) {
        workers[i].sfgz = workers[i].jbgz + workers[i].fdgz - workers[i].zc;
        printf("%s实发数 %.2f\n", workers[i].name, workers[i].sfgz);
    }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

嗯嗯,非常感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-13 17:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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