Изначально в состоянии l oop
while (strcmp(c,"#")!=0)
используется неинициализированная переменная c
. Таким образом, программа имеет неопределенное поведение. В этом вызове функции scanf
scanf ("%s",&c);
тип второго аргумента неверен. Тип выражения & c равен char ( * )[100]
, в то время как функция ожидает, что второй аргумент имеет тип char *
.
Также вы должны проверить 1) был ли файл открыт успешно и 2) пользователь не прерывает ввод в массиве.
Вместо scanf, который читает до появления пробела при использовании спецификатора преобразования% s, гораздо лучше использовать стандартную функцию fgets.
Также, если вы пишете в текстовый файл, желательно добавлять каждую запись с символом новой строки.
Основная часть программы может выглядеть следующим образом.
if ( fp != NULL )
{
while ( fgets( c, sizeof( c ), stdin ) != NULL && strcmp( c, "#" ) != 0 )
{
fprintf ( fp, "%s", c );
}
}
Обратите внимание, что fgets добавляет символ новой строки к введенной строке при условии, что строка с символом новой строки может быть размещена в массиве символов.