diff options
feat(Week06): Add solutions
1 files changed, 43 insertions, 0 deletions
| -rw-r--r-- | Week06/Exercise08.cpp | 43 |
diff --git a/Week06/Exercise08.cpp b/Week06/Exercise08.cpp new file mode 100644 index 0000000..cfaff5c --- /dev/null +++ b/Week06/Exercise08.cpp @@ -0,0 +1,43 @@ +#include <iostream> +#include <fstream> + +struct Smartphone { + short OSVersion; + unsigned long serialNumber; + float SAR; + char hardwareRevision; +}; + +int main() { + char fileName[1024]; + std::cin.getline(fileName, sizeof(fileName) / sizeof(*fileName)); + + std::ifstream inFile(fileName, std::ios::binary); + if (!inFile.is_open()) { + std::cout << "Couldn't open file!" << std::endl; + } + else { + inFile.seekg(0, std::ios::end); + // Като сме отишли в края на файла с горния seekg, + // ако вземем tellg, ще получим общия размер на файла + // в байтове. Помним че файла се представя все едно е + // един голям масив и g/p са индекси. + unsigned N = inFile.tellg() / sizeof(Smartphone); + inFile.seekg(0, std::ios::beg); + + for (unsigned i = 0; i < N; ++i) { + Smartphone buffer; + // Мислим за този char* не като низ ами като byte* + inFile.read((char*)&buffer, sizeof(buffer)); + + std::cout << (i+1) << '/' << N << std::endl + << "OS version: " << buffer.OSVersion << std::endl + << "Serial number: " << buffer.serialNumber << std::endl + << "SAR: " << buffer.SAR << std::endl + << "Hardware revision: " << buffer.hardwareRevision << std::endl; + } + } + + return 0; +} + |
