在第一个循环之后,迭代将忽略“雇员姓名:”的名称,并在循环的其余部分跳至“雇员的小时费率:”和“工作时间:”,直到完成为止。在“ 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。
答案 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
}
}