Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Cambio de comportamiento con scanf?

Estas en el tema de Cambio de comportamiento con scanf? en el foro de C/C++ en Foros del Web. Hola compañeros. haciendo algo tan básico como esto: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código C++: Ver original #include <stdio.h> #include <stdlib.h>   int main ( ) {   ...
  #1 (permalink)  
Antiguo 27/08/2016, 07:43
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 11 años, 2 meses
Puntos: 38
Pregunta Cambio de comportamiento con scanf?

Hola compañeros.

haciendo algo tan básico como esto:
Código C++:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(){    
  5.     int n;
  6.    
  7.     scanf("%d", &n);
  8.    
  9.     printf("\n%d", n);
  10.  
  11.     return 0;
  12. }

Al introducir un char en vez del int que espera scanf ya no peta. ¿A que se debe? ¿han cambiado el comportamiento del scanf en las nuevas versiones de gcc?

uso codeblocks com mingw-64, al hacer el comando gcc -v me sale que tiene la version 6.2, la cosa es que en la 5.3 tambien lo hacia.

No recuerdo bien, pero me parece que si esperaba un int y ponias un char, el programa petava, ahora traz compilar, al parecer es que scanf al detectar que es un char en vez de un int, simplesmente no hace nada, el int sigue con el valor que lo inicializas. ¿Saben algo al respecto?

No está mal eso pero simplesmente hay que saber a que se debe para no escapar-se al control.
  #2 (permalink)  
Antiguo 28/08/2016, 17:47
 
Fecha de Ingreso: abril-2016
Mensajes: 31
Antigüedad: 8 años, 8 meses
Puntos: 5
Respuesta: Cambio de comportamiento con scanf?

Hola; una mirada al estándar [URL="http://port70.net/~nsz/c/c11/n1570.html#7.21.6.4"]C11[/URL] (clic para ver) nos dice que

Cita:
3 The scanf function returns the value of the macro EOF if an input failure occurs before the first conversion (if any) has completed. Otherwise, the scanf function returns the number of input items assigned, which can be fewer than provided for, or even zero, in the event of an early matching failure.
Un ejemplo para estos casos puede ser:

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.     int n;
  7.  
  8.     int res = scanf("%d", &n);
  9.  
  10.     if(res == 0)
  11.         printf("matching failure\n");
  12.  
  13.     if(ferror(stdin))
  14.         perror("error");
  15.  
  16.     if(feof(stdin))
  17.         printf("end-of-file reached.\n"); // Ctrl+Z en Windows
  18.  
  19.     printf("\n%d", n);
  20.  
  21.     return 0;
  22. }
  #3 (permalink)  
Antiguo 28/08/2016, 18:59
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 11 años, 2 meses
Puntos: 38
Respuesta: Cambio de comportamiento con scanf?

O sea que si le asigno una letra en vez de un int no ocurre ninguna asignacion... cae directo en printf("matching failure\n");. ¡Está muy bien! ¡Gracias compañero! Por cierto... buena página. =)

Etiquetas: int, printf
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:01.