Página 1 de 1

Lectura entrada datos en C

NotaPublicado: 2012-11-20 12:58 @582
por gonzalos
Hola a todos.

Volvemos a la carga con C. Quién me mandaría a mí :wink:


Tengo otro problema. Ahora debo leer la siguiente secuencia:

n m id opcion

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
3 2 1 a b 2 a c 3 a b
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Luego sería comparar las opciones con la correcta y sumar los aciertos, obtenidos a través de una función desconocida, y los fallos. Teniendo en cuenta que los fallos restan 1/3 del valor de la pregunta.

He intentado hacer esto pero no me funciona la lectura de los datos:

Sintáxis: [ Descargar ] [ Ocultar ]
Using c Syntax Highlighting
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main ()
  5. {
  6.  
  7.  
  8. int i,j, n, id, m,aciertos, fallos;
  9. float nota;
  10. char opcion,opcorrect;
  11.  
  12. opcorrect='a';
  13.  
  14. aciertos=0;
  15. fallos=0;
  16.  
  17. scanf ("%d",&n);
  18. scanf ("%d",&m);
  19.  
  20. for (i=1;i<=n;i++){
  21.     scanf ("%d",&id);
  22.     for(j=1;j<=m;j++){
  23. scanf ("%c" ,&opcion);
  24.        if (opcion==opcorrect){
  25.             aciertos=aciertos+1;
  26.           }else{
  27.              fallos=fallos+2/3
  28. }
  29.             nota=(aciertos+fallos)/m
  30. }
  31.  
  32. printf ("%d",n);
  33. for (i=1;i<=n;i++){
  34. printf ("%d",id);
  35. printf ("%f",nota);
  36. }
  37. }
  38. return 0;
  39. }
  40.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


La comparación de opción con opcorrect, la he puesto para que funcionara el algoritmo.

La salida debería ser del tipo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
N id1 nota1 id2 nota 2
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


¿Alguna idea de por qué no me lee los datos de entrada?


Un saludo
Gonzalo

Re: Lectura entrada datos en C

NotaPublicado: 2012-11-20 20:02 @876
por explorer
Pues porque tienes metido el bucle for de la línea 33 dentro del bucle for de la línea 20, así que el segundo for "agota" el valor de i, y por eso no sigue el bucle de la línea 20.

Por favor: sangra las líneas como debe ser, y lo verás.

Usa un editor de código que sangre las líneas y te ahorrarás estos fallos. O usa un formateador de código, como perltidy.

Re: Lectura entrada datos en C

NotaPublicado: 2012-11-21 05:19 @263
por gonzalos
Hola, explorer.

Siento el no sangrar el código, sé que duele los ojos al verlo. Tengo que configurar el DevC++, para que lo haga de forma automática.

Bueno, he eliminado parte del código y por ahora me centro en la parte de lectura de la entrada:

Sintáxis: [ Descargar ] [ Ocultar ]
Using c Syntax Highlighting
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main() {
  5.  
  6. int i, j, nalu, id, pregu, aciertos, fallos;
  7. float nota;
  8. char opcion;
  9.  
  10. scanf( "%d", &nalu );
  11. scanf( "%d", &pregu );
  12.  
  13. for ( i = 1; i <= nalu; i++ ) {
  14.  
  15.     scanf( "%d", &id );
  16.  
  17.     for ( j = 1; j <= pregu; j++ ) {
  18.         scanf( "%c", &opcion );
  19.     }
  20. }
  21.  
  22. printf( "%d", id );
  23. printf( "%c", &opcion );
  24.  
  25. system("PAUSE");
  26. return 0;
  27. }
  28.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Al probar el doble bucle, el programa, me salta de la línea 15 a la línea 22, sin pasar por el bucle de la línea 17.

En mis años mozos, cuando "programaba" en Fortran 77, si no recuerdo mal, solía hacer los bucles de esta forma para tratar las matrices de datos.

Esta asignatura, va a acabar conmigo, :?

Un saludo
Gonzalo

Re: Lectura entrada datos en C

NotaPublicado: 2012-11-21 08:23 @391
por explorer
¿Estás seguro?

Coloca el printf() de la línea 23 dentro del bucle de la línea 17.

Así estarás seguro de qué es lo que hace ese bucle.

Re: Lectura entrada datos en C

NotaPublicado: 2012-11-27 12:38 @568
por gonzalos
Hola, explorer.

Perfecto, gracias. A veces me ofusco y no doy con la solución.

Un saludo
Gonzalo