gpt4 book ai didi

c++ - 我正在尝试使用 ifstream 将这个 C 函数的等效代码转换为 C++

转载 作者:行者123 更新时间:2023-11-30 21:06:54 26 4
gpt4 key购买 nike

这个函数读取一个包含字符大小数字的文本文件(该文本文件在另一个程序中以字符形式写入),我需要在读取后将它们转换为整数。由于我的程序的其余部分是用 C++ 编写的,所以我也想用 C++ 编写这个函数。我遇到的最大麻烦是 fread sizeof(char)

void VAD_Selector(vector<int>& x){
FILE *ptr = NULL;
if ((ptr = fopen(USABLE_VAD, "r")) == NULL) {
cout << "Error opening VAD file" << endl;
exit(0);
}
short mode = 0;
char VAD_input[2] = "0";
x[0] = 0;
int i = 1;
while (fread(VAD_input, sizeof(char), 1, ptr)) {
mode = (short)atoi(VAD_input);
if (mode != 1)
x[i] = 0;
i++;
}
fclose(ptr);
}

这是输入文本文件的样子:

00000000000000000000000000000000000001111111111111111111111111111111111111111111111

没有输出,但我想做的是将文本文件中的所有数据获取到 x vector (x[0] 始终为 0)

这是我尝试过的:

ifstream ptr;
ptr.open(USABLE_VAD);
if (!ptr.is_open()) {
cout << "Error opening VAD file" << endl;
exit(0);
}
else {
x[0] = 0;
int i = 1;
char c[2] = "0";
while (!ptr.eof()) {
ptr >> c;
x[i] = atoi(c);
cout << x[i];
i++;
}


}
ptr.close();

我之前在VS2015中遇到这个错误ptr << c :

Algo_gen.exe 中的 0x60C4B8BA (msvcp140d.dll) 引发异常:0xC0000005:读取位置 0x6CB95C28 时发生访问冲突。

如果有此异常的处理程序,则程序可以安全地继续。

我更改了 while 循环条件并使用 c - '0'它有效。谢谢大家。如果它可以帮助其他人,这是我的解决方案:

void VAD_Selector(vector<int>& x){
ifstream ptr;
ptr.open(USABLE_VAD);
if (!ptr.is_open()) {
cout << "Error opening VAD file" << endl;
exit(0);
}
else {
x[0] = 0;
int i = 1;
char c = '0';
while (ptr >> c) {
x[i] = c - '0';
i++;
}
}
ptr.close();

}

最佳答案

我想你想要的是这样的

std::vector<int> VAD_Selector(std::string const&file_name)
{
std::ifstream input(file_name);
if(!input.is_open())
throw std::runtime_error("failed to open file '"+file_name+"' for reading");
std::vector<int> data = {0};
for(char c; input >> c;)
data.push_back(int(c-'0'));
return data;
}

关于c++ - 我正在尝试使用 ifstream 将这个 C 函数的等效代码转换为 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46587901/

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