En primer lugar, otras preguntas sobre el uso de sscanf
no responden a mi pregunta porque la respuesta común es no utilizar sscanf
en absoluto y utilizar fgets
o getch
lugar, lo cual es imposible en mi caso.Cómo usar sscanf correcta y segura
El problema es mi profesor C quiere que yo utilizo scanf
en un programa. Es un requisito. Sin embargo, el programa también debe manejar todas las entradas incorrectas.
El programa debe leer una matriz de enteros. No importa en qué formato se suministran los enteros para la matriz. Para facilitar la tarea, el programa podría leer primero el tamaño de la matriz y luego los enteros, cada uno en una nueva línea.
El programa debe manejar las entradas como estos (y reportar errores apropiada):
- 999999999999999 ... 9 (números más grande que entero)
- 12A3 (no leer esto como un entero de 12)
- a ... z (cadenas)
- 11 AA 22 33 \ n todas en una línea (esto podría ser manejado por descartando todo después de 11)
- entradas más grande que la matriz de entrada
Puede haber casos más incorrectas, estos son los pocos que podía pensar.
Si se suministra la entrada errónea, el programa debe pedir al usuario que introduzca de nuevo hasta la entrada correcta se da, pero la entrada correcta anterior se debe mantener (sólo es incorrecto de entrada debe ser eliminado del flujo de entrada).
Todo debe cumplir con la norma C99.
Técnicamente, puede, siempre que cumpla con los requisitos que se muestran arriba. escanea el tamaño fijo en una cadena, que está bien definida, luego compruébalo y vuelve a escanear para hacer la conversión (que ahora es válida). Un poco ridículo, pero cumple con el requisito de usar scanf sin romperse; – davenpcj