• Publicidad

Lectura entrada datos en C

Todo lo relacionado con lenguajes de programación distintos de Perl: PHP, Java, C++, Ruby, Python, etc.

Lectura entrada datos en C

Notapor gonzalos » 2012-11-20 12:58 @582

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
gonzalos
Perlero nuevo
Perlero nuevo
 
Mensajes: 77
Registrado: 2009-11-27 05:47 @283

Publicidad

Re: Lectura entrada datos en C

Notapor explorer » 2012-11-20 20:02 @876

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.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Lectura entrada datos en C

Notapor gonzalos » 2012-11-21 05:19 @263

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
gonzalos
Perlero nuevo
Perlero nuevo
 
Mensajes: 77
Registrado: 2009-11-27 05:47 @283

Re: Lectura entrada datos en C

Notapor explorer » 2012-11-21 08:23 @391

¿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.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Lectura entrada datos en C

Notapor gonzalos » 2012-11-27 12:38 @568

Hola, explorer.

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

Un saludo
Gonzalo
gonzalos
Perlero nuevo
Perlero nuevo
 
Mensajes: 77
Registrado: 2009-11-27 05:47 @283


Volver a Programación en general

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 6 invitados