如何在For循环中使用多个Char数组和Float数组?

时间:2019-07-13 23:16:31

标签: c arrays loops for-loop floating-point

在第一个循环之后,迭代将忽略“雇员姓名:”的名称,并在循环的其余部分跳至“雇员的小时费率:”和“工作时间:”,直到完成为止。在“ For循环”中添加“浮点”数组后,问题开始了。

这是我得到的输出:

员工姓名1:亚历克斯 员工时薪:9.00 工作时间:8

员工姓名2:员工的时薪:9.50 工作时间:8

员工姓名3:员工的时薪:10.00 工作时间:8

等...

    #include <stdio.h>

    int main()
    {   int i;
        char empNames[5][32];
        float empRates[5][10];
        float empHours[5][10];

        for (i = 0; i < 5; i++)
        {
            printf("Name of employee %d: ", i+1);
            gets(empNames[i]);

            printf("Employee's hourly rate: ");
            scanf_s("%f", &empRates);//squiggly green line

            printf("Hours Worked: ");
            scanf_s("%f", &empHours);//squiggly green line
        }
      }

错误: -警告C4477'scanf_s':格式字符串'%f'需要类型为'float '的参数,而可变参数1的类型为'float()[5] [10]'。

-警告C6272在调用'scanf_s'时需要浮点时,非浮点作为参数'2'传递。实际类型:'float [5] [10]'。

-警告C4013'gets'未定义;假设extern返回int。

1 个答案:

答案 0 :(得分:0)

首先:使用gets很危险,您可以使用fgets来代替,查看更多信息:Why is the gets function so dangerous that it should not be used?

第二个:empRate [5] [10]是一个2D数组(矩阵),您只需要一个一维数组来保存您的浮标,每个浮标都可以放入empRate [i](与empHours相同)

#include <stdio.h>

int main()
{  
int i;
char empNames[5][32];
float empRates[5];
float empHours[5];

for (i = 0; i < 5; i++)
{
    printf("Name of employee %d: ", i+1);
    scanf("%32[^\n]s",empNames[i]);
    printf("Employee's hourly rate: ");
    scanf("%f", &empRates[i]);

    printf("Hours Worked: ");
    scanf("%f", &empHours[i]);
    fgetc(stdin); // clear the buffer from the new line character
    }
 }