У вас есть:
if (strcmp(input.fname, "stop") == 0)
exit(1);
На этом ваша программа заканчивается на этом этапе. Я не думаю, что ты этого хочешь. Скорее сломайте свой l oop:
if (strcmp(input.fname, "stop") == 0)
break;
Кроме того, обязательно закройте файл после того, как вы закончите запись в него и перед тем, как открыть его для чтения. В противном случае он может не существовать или вывод на него не может быть сброшен:
fclose(outfile);
Наконец, обратите внимание, что fwrite()
запишет двоичные данные вашей структуры. Это будет выглядеть как мусор для человеческого глаза, даже если fread()
должен читать это правильно. Но обратите внимание, что вы должны открыть файл как двоичный файл как для чтения, так и для записи. В противном случае некоторые системы (по крайней мере, Windows) будут выполнять некоторую интерпретацию данных.
outfile = fopen ("C:\\Users\\Admin\\Desktop\\read\\per.dat","wb");
infile = fopen ("C:\\Users\\Admin\\Desktop\\read\\per.dat","rb");
С этими изменениями ваш код, как мне кажется, будет работать нормально.
Знайте что запись и чтение двоичных данных таким способом может быть сопряжено с опасностью, если вы используете разные платформы для записи и чтения, отправки данных по сети или, возможно, даже используете разные опции компиляции. Порядок следования байтов («порядковый номер байтов»), размеры типов данных и заполнение структуры могут вызвать проблемы. Для реальных задач лучше использовать какую-нибудь портативную сериализацию.