diff options
feat(Week06): Add solutions
1 files changed, 35 insertions, 0 deletions
| -rw-r--r-- | Week06/Exercise05.cpp | 35 |
diff --git a/Week06/Exercise05.cpp b/Week06/Exercise05.cpp new file mode 100644 index 0000000..0b4d434 --- /dev/null +++ b/Week06/Exercise05.cpp @@ -0,0 +1,35 @@ +#include <iostream> +#include <fstream> + +int main() { + char fileName[1024]; + std::cin.getline(fileName, sizeof(fileName) / sizeof(*fileName)); + + unsigned N; + std::cin >> N; + + double* numbers = new double[N]; + for (unsigned i = 0; i < N; ++i) + std::cin >> numbers[i]; + + std::ofstream outFile(fileName, std::ios::binary | std::ios::trunc); + + if (!outFile.is_open()) { + std::cout << "Couldn't open file!" << std::endl; + } + else { + for (unsigned i = 0; i < N; ++i) { + // На практика, << конвертира подадената стойност до низ и след + // това я подава на write. + // Като говорим за двоични файлове, не говорим за низове и низови + // репрезентации, т.е. искаме да запишем байтовете в паметта + // които съставят числата (double е 64-битов, т.е. 8 байтов). + // Припомняме си, че char типа също е 8 бита, 1 байт, тоест тук + // трябва да мислим за char* като все едно byte*, не като низ. + outFile.write((const char*)(numbers + i), sizeof(*numbers)); + } + } + + delete[] numbers; + return 0; +} |
