gpt4 book ai didi

c++ - C++检测输入是否不满足条件

转载 作者:行者123 更新时间:2023-12-02 10:28:18 25 4
gpt4 key购买 nike

更新:请通过清晰的答案和用法示例指导我
我正在从二进制文件中读取数据,其中第一个数字表示要读取的输入或值的数量,第二个数字表示第一个输入的长度,然后是输入本身,之后是第二个输入的长度,然后是输入本身等等。
所以写了下面的代码:

    std::ifstream infile(filename, std::ios_base::binary);
unsigned int NumberOfInputs;
infile.read((char *) &NumberOfInputs, sizeof(unsigned int));

for (unsigned int i = 0; i < NumberOfInputs; i++) {
unsigned int Input_Lengh;
infile.read((char *) &Input_Lengh, sizeof(unsigned int));
string data;
while (Input_Lengh) {
char letter;
infile.read((char *) &letter, sizeof(char));
data += letter;
Input_Lengh--;
}
}
但是,如果文件已损坏,并且用户告诉我输入的数量是10,而我只读了2个(例如,因为我进入EOF),该怎么办?

最佳答案

使用std::istream::read()时,您可以测试eofbit和failbit标志。当到达文件末尾时,都将同时设置它们。对于您而言,在每次读取操作之后,我建议您测试是否设置了这些标志。如果是这样,只需中断文件读取序列即可。
例如:

if ( (infile.rdstate() & std::ifstream::failbit ) != 0 )
{
/* error handling here*/
}
另外,您可以使用gcount()std::istream方法获取成功读取的字符数。
例如:
if (infile.gcount() < N_EXPECTED_CHARS)
{
/* error handling here*/
}

关于c++ - C++检测输入是否不满足条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63355962/

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