cuốn sách gpt4 ai đã làm

c++ - Mong đợi dữ liệu eof nhưng tùy ý gần eof

In lại Tác giả: Walker 123 Thời gian cập nhật: 28-11-2023 00:45:41 25 4
mua khóa gpt4 Nike

Tôi đang cố gắng tìm ra nguyên nhân của dữ liệu cuối cùng không mong muốn trong tệp mà tôi đang ghi dữ liệu cụ thể và không tin rằng mình đang mắc lỗi khi ghi tệp.

Đầu ra như sau:

phòng xây dựng_số công suất

đóng gói | 101 |
họa sĩ | 514 |
ÿÿÿÿÿÿÿÿÿÿ | Cố gắng tìm kiếm lỗi con trỏ tệp

Cố gắng tìm kiếm lỗi con trỏ tệp là bình thường vì nó thể hiện một ngoại lệ được đưa ra khi cố gắng di chuyển con trỏ tệp vào luồng không hợp lệ. Nhưng,ÿÿÿÿÿÿÿÿÿÿ Điều này không bình thường cũng như không được mong đợi ở định dạng tệp có kích thước cố định sử dụng 10 hoặc 20 byte để ghi dữ liệu.

Tạo tập tin ở đây:

BinarySearchFile::BinarySearchFile(std::string file_name){

// nối phần mở rộng với fileName
file_name += ".dat";

// biểu mẫu tên tệp dữ liệu bảng hoàn chỉnh
data_file_name = file_name;

// tạo hoặc mở lại file dữ liệu bảng để đọc và ghi
nhị phân_search_file.open(data_file_name, std::ios::out | std::ios::in | std::ios::app);

if(!binary_search_file.is_open()){

nhị phân_search_file.clear();
nhị phân_search_file.open(data_file_name, std::ios::out);
nhị phân_search_file.close();
nhị phân_search_file.open(data_file_name, std::ios::out | std::ios::in | std::ios::app);
}

thử{
if(binary_search_file.fail()){
ném CustomException("Lỗi tệp dữ liệu bảng không xác định");
}
}
Catch (CustomException &custom_Exception){ // Sử dụng lớp ngoại lệ tùy chỉnh
std::cout << custom_Exception.what() << std::endl;
trở lại;
}

}

Ghi dữ liệu vào tập tin

void BinarySearchFile::writeT(std::string thuộc tính){
thử{
if(binary_search_file){
for(auto start = attribute.begin(); start != attribute.end(); ++start){
nhị phân_search_file.put(' ');
nhị phân_search_file.put(*bắt đầu);
}
nhị phân_search_file.flush();
/*
thuộc tính.resize(attribute.length() * 2);
const char *write_this = attribute.data();
nhị phân_search_file.write(write_this, thuộc tính.length());
*/
}khác nếu(binary_search_file.fail()){
ném CustomException("Cố gắng ghi lỗi thuộc tính");
}

}
Catch(CustomException &custom_Exception){ // Sử dụng lớp ngoại lệ tùy chỉnh
std::cout << custom_Exception.what() << std::endl;
trở lại;
}
}

Đọc file dữ liệu ở đây:

   std::string BinarySearchFile::readT(file_pointer_location dài, size_of_data dài) 
{
thử{
if(binary_search_file){

std::string data = "";
nhị phân_search_file.seekp(file_pointer_location);
nhị phân_search_file.seekg(file_pointer_location);
trong khi (size_of_data > 0 ){
nhị phân_search_file.get();
dữ liệu += nhị phân_search_file.get();
kích thước_of_data -= 2;
}

/*
dữ liệu char[20];
nhị phân_search_file.seekp(filePointerLocation);
nhị phân_search_file.seekg(filePointerLocation);
nhị phân_search_file.read(dữ liệu, sizeOfData);
*/
trả về dữ liệu;
}khác nếu(binary_search_file.fail()){
ném CustomException("Cố gắng đọc lỗi thuộc tính");
}

}
Catch(CustomException &custom_Exception){ // Sử dụng lớp ngoại lệ tùy chỉnh
std::cout << custom_Exception.what() << std::endl;
}

}

Code đọc file và in kết quả ra màn hình:

trong khi(đúng){

//khởi tạo lại con trỏ danh mục về đầu
danh mục->setPointerBegin();

//hiển thị dữ liệu
LÀM{
if (boost::iequals((domain = catalog->getAttributionDomain()), "string")){
if(dataFile->binary_search_file_status()){
std::cout << dataFile->read_data(filePointer, 20) << " | ";
nếu (!writer_.fail())
writer_ << dataFile->read_data(filePointer, 20) << " | ";
}
khác{
std::cout << "\n";
nếu (!writer_.fail())
nhà văn_ << "\n";

trả về sự thật;
}
// cập nhật con trỏ tập tin
con trỏ tệp += 20;
dataFile->set_file_pointer(filePointer);
}
khác{
if(dataFile->binary_search_file_status()){
std::cout << dataFile->read_data(filePointer, 10);
nếu (!writer_.fail())
writer_ << dataFile->read_data(filePointer, 10);
for(int i = 0; i < 5; i++){
std::cout << " ";
nếu (!writer_.fail())
nhà văn_ << " ";
}
std::cout << " | ";
if (!writer_.fail()){
nhà văn_ << " | ";
}
}
khác{
std::cout << "\n";
if (!writer_.fail()){
nhà văn_ << "\n";
}
trả về sự thật;
}
// cập nhật con trỏ tập tin
con trỏ tệp += 10;

}


} while(catalog->traverseForward() != nullptr);

std::cout << "\n";
nếu (!writer_.fail())
nhà văn_ << "\n";

}

}

câu trả lời hay nhất

std::ifstream::gettrở lại std::char_traits::eofKhi nó thất bại, thường có intgiá trị -1 .nếu bạn mù quáng hiểu nó là một ký tự hợp lệ và chuyển đổi thành ký tự , bạn sẽ nhận được '\xff' , trong ISO-8859-15 nó là ÿ .

bạn nên kiểm tra ôivà/hoặc eofbitKhi bạn đọc các ký tự từ một tập tin, đặc biệt là sau khi tra cứu.

Về c++ - mong đợi dữ liệu eof nhưng tùy ý gần eof , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/16365680/

25 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress