如何将预类型化文件转换为并行数组并在 c++ 中找到最大的数字
How do you turn a pre typed file into parallel arrays and find the largest number in c++?
对于我的类,我们必须获取他设置的文件并将其设置为三个并行数组。然后遍历数组并找到最大值并将其输出到文件中。这就是我到目前为止所写的。
void highScore(string x, string y)
{
const int sizeOfArray = 10;
string name[sizeOfArray];
int idNum[sizeOfArray];
float balance[sizeOfArray];
float highBalance = 0;
int highId = 0;
string highName;
ifstream InFile(x.c_str());
ofstream OFile(y.c_str(), ios::app);
for(int i = 0; i < sizeOfArray; i++)
{
getline(InFile, name[i], 'n');
InFile >> idNum[i] >> balance[i];
}
for(int i = 0; i < sizeOfArray; i++)
{
if(balance[i] > highBalance)
{
highBalance = balance[i];
highName = name[i];
highId = idNum[i];
}
}
OFile << left;
OFile << "Larger Balance:" << endl;
OFile << "ID # NAME BALANCE DUE" << endl;
OFile << "---- -------------------- -----------" << endl;
OFile << setw(9) << highId << setw(25) << highName << "$";
OFile << left;
OFile << setw(10) << highBalance << endl;
}
这是我们从中获取数据的文件。
Jean Rousseau
1001 15.50
Steve Woolston
1002 1423.20
Michele Rousseau
1005 52.75
Pete McBride
1007 500.32
Florence Rousseau
1010 1323.33
Lisa Covi
1009 332.35
Don McBride
1003 12.32
Chris Carroll
1008 32.35
Yolanda Agredano
1004 356.00
Sally Sleeper
1006 32.36
最终结果是支持看起来像。
Larger Balance:
ID # NAME BALANCE DUE
---- -------------------- -----------
1002 Steve Woolston $ 1423.20
提前谢谢你们。
你的代码看起来不错。 我看到的唯一问题是你的输入循环:
for(int i = 0; i < sizeOfArray; i++)
{
getline(InFile, name[i], 'n');
InFile >> idNum[i] >> balance[i];
}
让我们以字节为单位布置文件(我将使用 n
作为换行符(:
Jean Rousseaun1001 15.50nSteve Woolstonn1002 1423.20n...
现在,这是您的文件指针在循环第一次迭代后结束的地方:
Jean Rousseaun1001 15.50nSteve Woolstonn1002 1423.20n...
^--HERE
由于n
实际上分隔了数字输入,因此不会从流中删除该字符。 因此,下次循环时,您调用getline
,就会发生这种情况:
Jean Rousseaun1001 15.50nSteve Woolstonn1002 1423.20n...
^--HERE
哇,你只是读了一个空行! 现在,当您尝试输入两个数值时,它会失败,因为没有整数或浮点值以 S
开头。 但是现在,您定位正确,因此第三次循环将再次工作。
输入后,数组可能如下所示:
name idNum balance
0 "Jean Rousseau" 1001 15.5
1 "" -17733678 1.5944e-5
2 "Steve Woolston" 1002 1423.2
3 "" 499911200 7.773883e50
4 "Michele Rousseau" 1005 52.75
...
etc
问题是您假设索引 1 处的数组具有有效数字。 由于输入实际上失败,因此这些值未初始化。 它们只包含程序运行时内存中的任何垃圾。 因此,其中一个可能会被选为最高余额,并且将与您阅读的空名称配对。
简单的解决方案是跳过该行的其余部分(您应该在源文件中包含<limits>
(。
getline(InFile, name[i], 'n');
InFile >> idNum[i] >> balance[i];
InFile.ignore(std::numeric_limits<std::streamsize>::max(), 'n');
或者,您可以通过使用getline
后跟字符串流来确保正确的基于行的行为:
getline( InFile, name[i] );
string record;
getline( InFile, record );
istringstream iss( record );
iss >> idNum[i] >> balance[i];
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 检查输入是否不是整数或数字
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- 如何用数字处理log(0)
- 最高有效数字侧的第N位
- 如何获取一个数字的前3位
- 查找最接近的大于当前数字的数字的索引
- 找到两对数字,使它们的乘积的绝对差最小化
- 我想做一个彼此不同但重复出现的数字
- 将数字转换为字母(例如:123 转换为一二三)
- C++如何计算用户输入的数字中的偶数位数
- 如何在C++中确定文本文件中的元素是字符还是数字
- 打印数字图案
- C++问题:用户认为数字1-100,程序提出问题不超过6次即可得到答案。无法正确
- 如何检查一个c++字符串中有多少相同的字符/数字
- 求出有多少个数字是完美平方,而sqrt()是L,R范围内的素数
- 将数字打印成文字
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- 在将数字随机生成为数组期间从内存输出随机数的数组