De la manera más simple posible, ¿cómo puedo verificar si un entero inicializado de la función scanf
es un número?Compruebe si un valor de scanf es un número?
Respuesta
http://www.cplusplus.com/reference/clibrary/cstdio/scanf/
En caso de éxito, [scanf] devuelve el número de elementos con éxito leer. Este recuento de puede coincidir con el número esperado de lecturas o menos, incluso cero, si ocurre una coincidencia de . En el caso de una falla de entrada antes de que cualquier dato pudiera leerse con éxito, se devuelve EOF .
Por lo que podría hacer algo como esto:
#include <stdio.h>
int main()
{
int v;
if (scanf("%d", &v) == 1) {
printf("OK\n");
} else {
printf("Not an integer.\n");
}
return 0;
}
Gracias, hombre, funciona, pero si pongo esto en un bucle, no funciona correctamente, si la entrada es una cadena al principio, el ciclo es infinito, puedo resolver? – genesisxyz
Puse un getchar(); inside ... funciona ahora – genesisxyz
'sscanf' y' scanf' es una mala idea. Ambos producen un comportamiento indefinido en el desbordamiento. – AnT
Su pregunta tiene una redacción extraña. Un número entero inicializado es siempre un número (aparte de los casos exóticos de representaciones de trampas), lo que significa que no hay necesidad de verificar nada.
Supongo que debe comprobar si la cadena dada es una representación válida de un número. Para eso, primero debe definir cómo debería ser la representación válida. ¿Permites signo? ¿Se permite (como un signo) un +
redundante? ¿Qué pasa con el prefijo 0x
para hexadecimales? Y así.
El lenguaje C ofrece su propio conjunto de reglas que definen la idea del lenguaje de una representación de cadena válida de un entero. Si eso es lo que necesita, entonces para verificar si la cadena dada cumple estas reglas, la mejor manera es usar la función de conversión de cadena a entero como strtol
(y otras funciones del grupo strto...
) y luego verificar la condición de error.
Tenga cuidado con las respuestas que sugieren escribir su propia función que verificaría estas reglas. Esto simplemente no tiene sentido, ya que la función estándar ya existe. Además, estrictamente hablando, en la programación de la vida real rara vez es necesario realizar la verificación sin la conversión real. strto...
hará las dos cosas.
Además, aléjese de las funciones del grupo scanf
para realizar una conversión de cadena a entero. Estas funciones producen un comportamiento indefinido en el desbordamiento (es decir, si la representación de la cadena de entrada es demasiado larga). En general, la única forma adecuada de hacer tal conversión en C es funciones del grupo strto...
.
- 1. Compruebe si el valor es un número
- 2. columna Compruebe si hay un valor único
- 3. Compruebe si existe un valor en ArrayList
- 4. Compruebe si un objeto es un delegado
- 5. Haskell: compruebe si es un número entero, o compruebe el tipo de variable
- 6. Compruebe que la variable es un número
- 7. ¿Cómo puedo verificar si un valor es un número?
- 8. Perl, ¿cómo determinar si un valor variable es un número?
- 9. Determinar si un valor es un número entero en Python
- 10. Compruebe si el valor es nulo
- 11. Java, compruebe si el número entero es múltiple de un número
- 12. ¿Determinar si el valor de JavaScript es un "número entero"?
- 13. compruebe si un archivo es ejecutable
- 14. compruebe si un objeto es nulo
- 15. Pruebe si el valor es un número entero en Sass
- 16. Compruebe si existe un valor único antes de crearlo
- 17. Compruebe si una cadena termina con un número en PHP
- 18. C - Compruebe si se ha asignado un número entero
- 19. Compruebe si string es un prefijo de un Javascript RegExp
- 20. Compruebe si un directorio es un (sistema de archivos) raíz
- 21. Compruebe si una lista contiene un valor específico en Clojure
- 22. Compruebe si un objeto es un NSArray o NSDictionary
- 23. Compruebe si un argumento es una lista o un átomo
- 24. Ruby: determine si un número es un número primo
- 25. ¿Cómo detectar si un número dado es un número entero?
- 26. Compruebe si un objeto es una colección genérica
- 27. Compruebe si un entero es una potencia entera de otro
- 28. compruebe si el archivo es de un tipo determinado
- 29. Compruebe si una matriz es un subconjunto de otra
- 30. Mangosta: compruebe si el objeto es un objeto de mangosta
Creo que esta pregunta responde la tuya. http://stackoverflow.com/questions/456303/how-to-validate-input-using-scanf – hometoast
si un entero es un número? –
Leí la pregunta como "si la cadena leída es un número entero válido". – hometoast