Pregunta

¿Cómo maneja C la conversión entre enteros y caracteres? Supongamos que ha declarado una variable entera y pida al usuario un número, pero ingresan una cadena en su lugar. ¿Qué pasaría?

¿Fue útil?

Solución

La entrada del usuario se trata como una cadena que debe convertirse en un int utilizando atoi u otra función de conversión. Atoi devolverá 0 si la cadena no puede interpretarse como un número porque contiene letras u otros caracteres no numéricos.

Puedes leer un poco más en la documentación de atoi en MSDN - http://msdn.microsoft.com/en-us/library/yd5xkb5c (VS.80) .aspx

Otros consejos

Uh? Siempre ingresas una cadena. Luego analiza convertir esta cadena en número, con varias formas (preguntando de nuevo, tomando un valor predeterminado, etc.) de manejar varios errores (desbordamiento, caracteres incorrectos, etc.).

Otra cosa a tener en cuenta es que en C, los caracteres y los enteros son " compatibles " hasta cierto grado. Cualquier carácter puede ser asignado a un int. Lo contrario también funciona, pero perderá información si el valor entero no se ajusta a un carácter.

char foo = 'a'; // The ascii value representation for lower-case 'a' is 97
int bar = foo; // bar now contains the value 97 
bar = 255; // 255 is 0x000000ff in hexadecimal
foo = bar; // foo now contains -1 (0xff) 
unsigned char foo2 = foo; // foo now contains 255 (0xff)

Como han señalado otras personas, los datos normalmente se ingresan como una cadena; la única pregunta es qué función se usa para hacer la lectura. Si está utilizando una GUI, es posible que la función ya se ocupe de la conversión a errores de enteros e informes, por lo que de una manera adecuada. Si está trabajando con el Estándar C, generalmente es más fácil leer el valor en una cadena (tal vez con fgets () y luego convertir. Aunque atoi () puede ser utilizado, rara vez es la mejor opción; el problema es determinar si la conversión se realizó correctamente (y produjo cero porque el usuario ingresó una representación legítima de cero) o no.

Generalmente, use strtol () o uno de sus parientes ( strtoul () , strtoll () , strtoull () ); para convertir números de punto flotante, use strtod () o una función similar. La ventaja de las rutinas de conversión de enteros incluye:

  • selección de base opcional (por ejemplo, base 10 o base 10 - hex, o base 8 - octal, o cualquiera de las anteriores utilizando las convenciones estándar de C (007 para octal, 0x07 para hex, 7 para decimal).
  • detección de errores opcional (al saber dónde se detuvo la conversión).

El lugar donde voy para muchas de estas especificaciones de funciones (cuando no veo mi copia del estándar C real) es POSIX sitio web (que incluye funciones C99). Está centrado en Unix en lugar de Windows.

El programa se bloquearía, debe llamar a la función atoi.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top