Buenas,
Estoy empezando con C, y uso el compilador GCC (4.6.1). Linux.
Ocurre algo muy raro, y es que un mismo fichero de texto ante diversas compilaciones seguidas y ejecuciones, los resultados son diversos.
Esta es mi primera pregunta: ¿Habéis experimentado ese tipo de acontecimientos? ¿Creéis que es debido al gcc? ¿Debería de cambiar de compilador?
A algún compañero le ha pasado lo mismo. Y no sé si será coincidencia, pero en alguna ocasión el cerrar el gedit (con el que edito el archivo .c) y la consola y abrirlos de nuevo daba un resultado distinto tras compilar y ejecutar de nuevo.
Por otro lado, un tipo de resultado que es muy raro, a ver si me podéis decir en qué falla:
main2.c
Código:#include <stdio.h> int main(int argc, char *argv[]){ int d; int val = scanf("%d", &d); val = scanf("%d", &d); printf("%d\n",val); printf("%d\n",scanf("%d", &d)); return 0; }
ejecución
A mi modo de ver aquí hace algo raro:Código:user@userpc:~/Desktop$ gcc main2.c user@userpc:~/Desktop$ ./a.out 12 25 1 56 1 user@userpc:~/Desktop$ ./a.out abc 0 0
-si meto número funciona como debe.
-Pero si meto letras, devuelve 0 (scanf) y hasta ahí bien, pero no tiene que mostrarlo. Y él lo muestra (el primer 0). Y luego muestra otro 0 (que ya no sé de cual es ese último 0, porque supuestamente hay más scanf que no pide), saltandose dos lineas de scanf (y las dos deberían mostrar el valor, y no la primera).
main3.c
ejecuciónCódigo:#include <stdio.h> int main(int argc, char *argv[]){ int d; int val = scanf("%d", &d); if (val == 1){ printf("%d\n", d); }else if ( val == 0){ puts("Failed Conversion"); }else{ // == EOF puts("EOF: Input failure"); } while (scanf("%d", &d) != 1) ; printf("%d\n", d); return 0; }
-Primera ejecución todo correcto al meter números.Código:user@userpc:~/Desktop$ gcc main3.c user@userpc:~/Desktop$ ./a.out 12 12 25 25 user@userpc:~/Desktop$ ./a.out ab Failed Conversion ab ab ab 12 3 4 5 6 jk 12 ^C
-Segunda ejecución: En este caso vemos como con el primer if else encadenado funciona correctamente, pues cuando meto letras (retorna 0 y muestro el mensaje), pero luego, debería estar pidiendo hasta que no insertemos algo incorrecto (letras por ejemplo), y salirse del bucle cuando ponga un digito, por ejemplo, pero no lo hace. Como véis tengo que interrumpir la ejecución (Ctrl+C).
Un saludo.


Citar

