fgets () saltato

Sto scrivendo un programma per la scuola in cui l’utente inserisce il nome, le ore lavorate e il salario orario.

int main () { char name[SIZE]; char selection = 'Z'; int hoursWorked = 0, counter = 0, flag = 1; float hourlyRate = 0.0; const float otRate = 1.5; const int week = 40; while (flag == 1) { system ("cls"); printf ("\n\tP AYROLLPROGRAM\n"); printf ("---------------------------------------------\n"); printf ("\t(A) - New Payroll Info\n\t(B) - Display Payroll\n\t(C) - Quit\n\t"); scanf (" %c", &selection); selection = toupper (selection); switch (selection) { case 'A': system ("cls"); printf ("Enter Employee Name: "); fgets ( name, SIZE, stdin ); strip_newline( name, 50 ); printf ("\nEnter Hourly Rate: "); scanf ("%f", &hourlyRate); printf ("\nEnter Hours Worked This Week: "); scanf ("%d", &hoursWorked); system ("pause"); break; 

SIZE è 50, stdio.h e stdlib.h sono inclusi. Quando compilo e passo al pulsante A, salta l’input di fgets() e passa direttamente a "Enter Hourly Rate: " scanf() . Ho provato a cambiare l’ordine mettendo i scanf() s davanti a fgets() , senza alcun risultato.

La tua chiamata scanf lasciato un carattere di nuova riga nel buffer di input. Di conseguenza, quando viene effettuata la chiamata a fgets , legge quella nuova riga e restituisce.

Come da commento di pmg sopra, controlla la risposta alla Domanda 12.18a nella FAQ C.

scanf probabilmente non sta mangiando il ritorno alla fine della riga, quindi è passato ai primi fgets. Personalmente, odio scanf – è meglio usare fgets e quindi analizzare la linea usando sscanf.