Per un inizio, il tuo answer
va dovrebbe essere di tipo char
, non char*
.
Per quanto riguarda la dichiarazione if
:
if (answer == ('Y' || 'y'))
Questo è il primo valutando 'Y' || 'y'
che, nella logica booleana (e per ASCII) è vero in quanto entrambi sono "vere" (non-zero).In altre parole, ci si ottiene solo la dichiarazione if
al fuoco se si desidera in qualche modo entrato CTRLA (ancora una volta, per ASCII, e dove un vero valore equivale a 1) * un.
È potrebbe utilizzare il più corretto:
if ((answer == 'Y') || (answer == 'y'))
ma è davvero dovrebbe utilizzare:
if (toupper(answer) == 'Y')
dato che questo è il modo più portabile per raggiungere lo stesso fine.
* una Ci si potrebbe chiedere perché sto mettendo in tutti i tipi di condizionali per le mie affermazioni. Mentre la stragrande maggioranza delle implementazioni C utilizza ASCII e alcuni valori noti, non è obbligatoriamente prescritta dagli standard ISO. So per certo che almeno un compilatore usa ancora EBCDIC quindi non mi piace fare ipotesi ingiustificate.
.. o chiamando 'malloc()' – Arun
@ArunSaha: sì, o puntare a una variabile char locale. – codaddict
perché è necessario mettere uno spazio prima di% c in scanf? per me non funziona se rimuovo lo spazio prima di% c in scanf. – hunch