首页 > 解决方案 > 如何在 For 循环中使用多个字符数组和浮点数组?

问题描述

在第一个循环之后,迭代忽略“员工姓名#:”并跳转到“员工的小时费率:”和“工作时间:”循环的其余部分,直到完成。在“For Loop”中添加“Float”数组后,问题就开始了。

这是我得到的输出:

员工姓名 1:Alex 员工的时薪:9.00 工作时间:8

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

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

ETC...

    #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”传递实际类型:“浮点 [5][10]”。

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

标签: carraysloopsfor-loopfloating-point

解决方案


首先:gets 使用起来很危险,您可以使用 fgets 来查看更多信息:为什么 gets 函数如此危险以至于不应该使用它?

第二:empRate[5][10] 是一个二维数组(矩阵),您只需要一个一维数组来保存您的浮点数,每个浮点数都可以放入 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
    }
 }

推荐阅读