gpt4 book ai didi

c++ - 卡在阵列上

转载 作者:太空宇宙 更新时间:2023-11-04 13:42:48 25 4
gpt4 key购买 nike

我是一名学生,我不知道如何完成这项作业。基本上应该自动计算数据文件的校验和并将该校验和存储在无符号整数数组中。文件的名称应该存储在另一个并行数组中,文件的内容将被读入一个字符数组以计算校验和。

这是我目前所拥有的:

#include <iostream>
#include <string>
#include <iomanip>
#include <fstream>
#include <cstring>

using namespace std;


int main()
{
//declare variables
string filePath;
void savefile();
char choice;
int i,a, b, sum;
sum = 0;
a = 0;
b = 0;
ifstream inFile;
//arrays
const int SUM_ARR_SZ = 100;
string fileNames[SUM_ARR_SZ];
unsigned int checkSums[SUM_ARR_SZ];
do{
cout << "Please select: " << endl;
cout << " A) Compute checksum of specified file" << endl;
cout << " B) Verify integrity of specified file" << endl;
cout << " Q) Quit" << endl;
cin >> choice;

if (choice == 'a' || choice == 'A')
{
//open file in binary mode
cout << "Specify the file path: " << endl;
cin >> filePath;
inFile.open(filePath.c_str(), ios::binary);

//save file name
fileNames[a] = filePath;
a++;


//use seekg and tellg to determine file size
char Arr[100000];
inFile.seekg(0, ios_base::end);
int fileLen = inFile.tellg();
inFile.seekg(0, ios_base::beg);
inFile.read(Arr, fileLen);
inFile.close();
for (i = 0; i < 100000; i++)
{
sum += Arr[i];
}
//store the sum into checkSums array
checkSums[b] = sum;
b++;
cout <<" File checksum = "<< sum << endl;

}
if (choice == 'b' || choice == 'B')
{
cout << "Specify the file path: " << endl;
cin >> filePath;
if (strcmp(filePath.c_str(), fileNames[a].c_str())==0)
{

}
}
} while (choice != 'q' && choice != 'Q');
system("pause");
}

以及我们的输出应该是什么的示例('a' 是用户输入):

Please select:
A) Compute checksum of specified file
B) Verify integrity of specified file
Q) Quit
a
Specify the file path: c:\temp\tmp1
File checksum = 1530
Please select:
A) Compute checksum of specified file
B) Verify integrity of specified file
Q) Quit

更新:我现在已经整理出程序的第一部分,即检查总和的部分。如果您在菜单上选择 B,我现在遇到的问题是让输出正确。它应该检查两个数组并确保名称正确并确保校验和相同,但我完全不知道如何将其放入代码中。

最佳答案

问题是您的 for 循环的限制。无论文件的长度如何,它都会读取 100000 次。将 100000 更改为 fileLen 将读取限制为读取到 Arr 中的每个字符:

for (i = 0; i < fileLen; i++) {
sum += Arr[i];
}

输出:

$ ./bin/cscpp
Please select:
A) Compute checksum of specified file
B) Verify integrity of specified file
Q) Quit
a
Specify the file path:
tmpkernel315.txt

File checksum = 46173

关于c++ - 卡在阵列上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27097904/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com