¿Por qué la asignación de valor char a float no funciona?

Nota: esta pregunta es muy simple, pero cuando busco en Google no tengo una aclaración clara.

Tengo siguiente progtwig

int main() { float c; scanf("%f",&c); printf("%f",c); } 

o / p cuando doy un valor int (e, g – 9) lo muestra como 9.000000

pero cuando doy un valor char como ‘a’ no se muestra y muestra 0.000000. Sé que la memory representation of float es totalmente diferente de int pero luego cómo cuando doy int value (9) se muestra pero cuando estoy dar char (a) que también es un int (97) no se muestra.

Cómo está sucediendo. ¿Qué es la representación en memoria durante la asignación de caracteres?

Tenga en cuenta que no hay caracteres aquí en su código.

Esta es la forma en que se supone que funciona scanf . Si verifica el valor de retorno de scanf (¡como debería ser!) Probablemente verá que está devolviendo 0, lo que significa que no se encontraron coincidencias.

Cuando le das a scanf() una cadena de formato "%f" , significa “Quiero que trates de obtener un número de punto flotante . Cuando proporcionas una entrada como ‘a’, no va a coincidir con nada, porque 'a' no es un número válido de punto flotante.

http://www.cplusplus.com/reference/cstdio/scanf/

Primero, generalmente debe terminar su printf formato printf con una nueva línea \n o, si no, llamar a fflush .

Luego, debe leer la documentación en scanf es decir, su página de manual scanf (3)

Puede fallar, y devuelve el número de coincidencias exitosas:

Valor de retorno

Estas funciones devuelven el número de elementos de entrada coincidentes y asignados con éxito, que puede ser menor que el previsto, o incluso cero en caso de una falla de coincidencia temprana.

El valor EOF se devuelve si se llega al final de la entrada antes de que se produzca la primera conversión exitosa o se produzca una falla de coincidencia. EOF también se devuelve si se produce un error de lectura, en cuyo caso se establece el indicador de error para el flujo (consulte ferror (3)), y errno se establece indica el error.

Se produce un error cuando escribe una letra de entrada a contra de una especificación de conversión %f . En su caso, la variable c se modifica (es decir, “sin inicializar”).

Debe probar el resultado de scanf (es <=0 en caso de fallo en su caso).

scanf en el formulario que escribió, intentará encontrar y leer números ( int / float ) hasta el primer carácter no numérico (nueva línea, espacio, cualquier letra). Las letras son int s, pero esto se debe al scanf y la forma en que debe comportarse. Lea los documentos.