c - 如何在 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。
解决方案
首先: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
}
}
推荐阅读
- nginx - nginx 位置指令附加到 url 路径
- c++ - c++ 11 原子变量上的哪些操作实际上是原子的?
- c# - 如果我在 asp.net 中为同步方法调用异步方法时不等待异步方法怎么办?
- php - 无法使用 symfony 进程运行 python 脚本
- python-3.x - 如何循环记录用户输入
- sed - sed 替换文本文件或 powershell 窗口中的 NUL 或 CRLF(如果不在行尾)
- vue.js - 如何使用 Vue 显示数据库中特定类型的内容
- javascript - Bootstrap4:修复和淡入页面底部的页脚
- python - Why do I get this failure and why is mysql set to false?
- android - 多次按下后如何修复按钮停止功能?