Предупреждения довольно очевидны. Когда вы вызываете scanf
со спецификатором формата %s
, вам необходимо предоставить ему указатель на первый элемент массива char, в который можно скопировать строку. Вы этого не делаете, вместо этого вы даете ему адрес указателя на символ.
char[100] fullname;
scanf( "%s", fullname );
Та же проблема существует для даты. Также имейте в виду, что при использовании приведенного выше кода произойдет переполнение буфера, если пользователь введет строку длиной не более 100 символов.
Если вы используете MSVC, вы можете использовать функцию scanf_s
, которая требует ввода длины буфера. Однако эта функция специфична для Microsoft и, следовательно, не переносима.
scanf_s( "%s", fullname, 100 );
Для зарплаты проблема заключается в том, что спецификатор формата - %d
, который используется для чтения целых чисел, а не чисел с плавающей запятой. Используйте
scanf( "%f", &sal );