следующий предложенный код:
- чисто компилируется
- включает комментарии к вопросу
- выполняет желаемую функциональность
- не включаетфайлы заголовков, содержимое которых не используется
- правильно проверяет наличие ошибок
- учитывает правое поле печатной страницы
- исключает любую возможность переполнения буфера и результирующего неопределенного поведения
- помнит, что ссылка на массив ухудшается до адреса первого байта массива
- всегда передает адрес в качестве параметра функции:
scanf()
- документирует, почему каждый заголовокфайл включен
- отделяет определение структуры от экземпляра структуры
- не объявляет экземпляр структуры, который «затенен» другим экземпляром структуры с тем же именем
- использует одну из действительных сигнатур для функции:
main()
и теперь предложенный код:
#include <stdio.h> // fprintf(), fopen(), fclose(), perror(), scanf()
#include <stdlib.h> // EXIT_FAILURE, exit()
struct room
{
int room;
char type[9];
int cap;
int price;
};
int main( void )
{
struct room rm;
FILE *k = fopen("rooms.txt","w");
if( !k )
{
perror( "fopen rooms.txt for writing failed" );
exit( EXIT_FAILURE );
}
printf("Please enter a room number:");
if( scanf("%d", &rm.room) != 1 )
{
fprintf( stderr,
"scanf for -room number- failed\n" );
fclose( k );
exit( EXIT_FAILURE );
}
printf("\nPlease enter a room description:");
if( scanf("%8s", rm.type) != 1 )
{
fprintf( stderr,
"scanf for -room description- failed\n" );
fclose( k );
exit( EXIT_FAILURE );
}
printf("\nPlease enter the room capacity:");
if( scanf("%d", &rm.cap) != 1 )
{
fprintf( stderr,
"scanf for -room capacity- failed\n" );
fclose( k );
exit( EXIT_FAILURE );
}
printf("\nPlease enter the room price:");
if( scanf("%d", &rm.price) != 1 )
{
fprintf( stderr,
"scanf for -room price- failed\n" );
fclose( k );
exit( EXIT_FAILURE );
}
// multi lined parameters to honor right page margin
fprintf(k,"%d\t %s\t %d\t %d\n",
rm.room,
rm.type,
rm.cap,
rm.price);
fclose(k);
}
в ответена вопрос OP: Почему эта программа не печатает в моем файле?
Поскольку отправленный код ничего не вводит из-за неправильного синтаксиса для параметров функции scanf()