Делаю лабу в универе. Есть структуры, данные которых вводятся с клавиатуры, потом записываются в файл с помощью функции fwrite(). До сих пор работал только с fstream, и проблем не возникало. Тут тоже вроде как всё сделал правильно, но на выхлопе получаю файл device.txt, а в нём сплошные крякозябры. Собираю с под линукса g++.
Вся программа на гите https://github.com/rotenbergwitalik/laba6.git
код с main:
#include
#define DEVICE_NAME_LEN 30
#define MEASUREVALUE_NAME_LEN 30
using namespace std;
struct powerSource {
float voltage;
float amperage;
float periodicity;
};
struct measuredValue {
char measuredValueName[MEASUREVALUE_NAME_LEN];
float lowBorder;
float highBorder;
float inaccuracy;
};
struct device {
char deviceName[DEVICE_NAME_LEN];//
float devicePrice;
int guarantee; //in month
struct powerSource devicePowerSource;
struct measuredValue deviceMeasureValue;
};
int main() {
struct device labaDevice;
cout<<"Write name of device: ";
cin>>labaDevice.deviceName;
cout<<"Write price of device in $: ";
cin>>labaDevice.devicePrice;
cout<<"Write guarantee in month: ";
cin>>labaDevice.guarantee;
cout<<"Write power source for device: "<
cout<<"Write measure value for device: "<
FILE* outFile;
if ((outFile = fopen("device.txt", "wb")) == NULL) {
cout<<"Con not open the file"<
fclose(outFile);
return 0;
}
Ответ
Думаю, что вы просто раньше выводили поля с помощью оператора вывода в поток <<, т.е. в текстовом виде. fwrite пишет данные в бинарном виде, как есть. Режим wt меняет одно - обработку
. Если вы хотите получать все данные в текстовом виде, используйте fprintf - типа, вместо
outStream << "guarantee = " << labaDevice.guarantee << endl;
используйте
fprintf(outFile,"guarantee = %d
",labaDevice.guarantee);
Но учтите, что если потом надо будет считывать - то считывать тоже надо будет текстово. А если используете fwrite в бинарном режиме - то потом всю структуру сразу втянете одним fread в том же бинарном режиме...
Комментариев нет:
Отправить комментарий