verificar validar solo restringir positivos numeros numero letras lenguaje ingresar enteros como bloquear c arrays char isalpha

validar - Verifica si una cadena tiene solo números en C?



validar solo numeros en matlab (5)

Intento escribir un código simple para verificar si una cadena solo tiene números. Hasta ahora no está funcionando, cualquier ayuda sería apreciada.

#include <stdio.h> #include <string.h> #include <ctype.h> int main() { char numbers[10]; int i, correctNum = 0; scanf("%s", numbers); for(i = 0 ; i <= numbers ; ++i) { if(isalpha(numbers[i])) { correctNum = 1; break; } } if(correctNum == 1) { printf("That number has a char in it. FIX IT./n"); } else { printf("All numbers. Good./n"); } return 0; }


Agregando a las otras respuestas, también puede usar strtol para determinar si una cadena tiene todos los números o no. Básicamente, convierte la cadena en un entero, y omite los no enteros. Puede leer la página de manual para obtener más información sobre esta función y la extensa comprobación de errores que puede hacer con ella.

Además, debes usar:

scanf("%9s", numbers);

En lugar de:

scanf("%s", numbers);

Para evitar el desbordamiento del búfer.

Aquí hay un código de ejemplo:

#include <stdio.h> #include <stdlib.h> #define MAXNUM 10 #define BASE 10 int main(void) { char numbers[MAXNUM]; char *endptr; int number; printf("Enter string: "); scanf("%9s", numbers); number = strtol(numbers, &endptr, BASE); if (*endptr != ''/0'' || endptr == numbers) { printf("''%s'' contains non-numbers/n", numbers); } else { printf("''%s'' gives %d, which has all numbers/n", numbers, number); } return 0; }

Ejemplo de entrada 1:

Enter string: 1234

Salida:

''1234'' gives 1234, which has all numbers

Ejemplo de entrada 2:

Enter string: 1234hello

Salida:

''1234hello'' contains non-numbers


Usted tiene un error en el ciclo for - for (i = 0; i <= numbers; ++ i)

números es puntero y está prohibida la comparación con enteros. Código correcto -

#include <stdio.h> #include <string.h> #include <ctype.h> int main() { char numbers[10]; int i, correctNum = 0; scanf("%s", numbers); for(i = 0 ; i < strlen(numbers) ; ++i) { if(!(numbers[i]>=''0'' && numbers[i]<=''9'')) { correctNum = 1; break; } } if(correctNum == 1) { printf("That number has a char in it. FIX IT./n"); } else { printf("All numbers. Good./n"); } return 0; }


#include <stdio.h> #include <string.h> int main() { char numbers[10]; int i, correctNum = 0; scanf("%s", numbers); for(i = 0 ; i < 10 ; i++) { if(numbers[i]<48||numbers[i]>57) { correctNum = 1; break; } } if(correctNum == 1) { printf("That number has a char in it. FIX IT./n"); } else { printf("All numbers. Good./n"); } return 0; }


for(i = 0 ; i <= numbers ; ++i) //how is this supposed to work.

Ejecute el ciclo de 0 a 1 menos que la length de la entrada.

for(i = 0 ; i < strlen(numbers) ; ++i)


Puede considerar usar strspn :

#include <stdio.h> #include <string.h> int main(int argc, char* argv[]) { int i; for (i=1; i < argc; i++) { printf("%s %s/n", strlen(argv[i]) == strspn(argv[i], "0123456789") ? "digits" : "mixed", argv[i] ); } }

Demoed:

$ ./try foo 123 ba23a 123.4 mixed foo digits 123 mixed ba23a mixed 123.4

strspn devuelve el número inicial de caracteres del primer argumento que aparece en el segundo argumento. Súper simples ejemplos:

strspn("abba", "a"); // == 1 strspn("abba", "b"); // == 0 strspn("abba", "ab"); // == 2