C/Visual C - Problemas con scanf

 
Vista:

Problemas con scanf

Publicado por [Sauron] (1 intervención) el 05/01/2002 18:46:05
Hola a todos, antes de nada voy a poner el codigo del programa para que sea mas facil explicar el problema.
#include <stdio.h>

char opciones;
char nif[23]={'T','R','W','A','G','M','Y','F','P','D','X','B','N','J','Z','S','Q','V','H','L','C','K','E'};
int nifdos;

int dni;
int paso1;
int paso2;
int paso3;

int main()

{
system("clear");
// OPCIONES DEL PROGRAMA

printf("\n A)- Insertar DNI para saber el NIF");
printf("\n B)- Generar DNIs a partir del NIF");
printf("\n C)- Generar tabla de DNI aleatorios");
printf("\n D)- Verificar si un DNI es verdadero\n");

// FIN OPCIONES

printf("\n ¿ Que opcion deseas ? ");
scanf("%c", &opciones);

// CONDICIONES

if ( opciones=='a' || opciones=='A' ) // CONDICION A
{
printf("\n Has escogido la opcion A");
printf("\n Inserta el numero de DNI para saber el NIF: ");
scanf("%i", &dni);

if( dni<=00000000 | dni>=99999999 )
{
printf(" ERROR! Tienes que introducir correctamente los nueve digitos del DNI\n\n");
}
else
{
// PASOS PARA CALCULAR EL NIF
paso1=dni/23;
paso2=paso1*23;
paso3=dni-paso2;

printf("\n Primer paso (dni/23): "); //paso1
printf("%i", &paso1 );
printf("\n Segundo paso (dni*23): "); //paso2
printf("%i", &paso2 );
printf("\n Tercer paso (dni-paso2): "); //paso3
printf("%i", &paso3 );
printf("\n DNI con NIF: "); //paso4
printf("%i-%c\n\n",dni, paso3[nif] );
}
}

if ( opciones=='d' || opciones=='D' ) // CONDICION D
{
printf("\n -------------------------------------------------");
printf("\n | TABLA DE NIFS |");
printf("\n -------------------------------------------------");
printf("\n | T | R | W | A | G | M | Y | F | P | D | X | B |");
printf("\n | N | J | Z | S | Q | V | H | L | C | k | E | T |");
printf("\n -------------------------------------------------");
printf("\n Inserta la letra del DNI que quieres comprobar ");
scanf("%i", &nifdos );

if ( nifdos=='t' )
{
printf(" Es t ");
}
}
}

-----------------
Bien, el problema esta unos pocos centimetros mas arriba, justamente en: if ( opciones=='d' || opciones=='D' ) // CONDICION D
Siguiendo el codigo vereis que tengo que introucir una letra, y de ejemplo he puesto que si es t el programa diga: es t , pero esto no ocurre, sencillamente pasa de la condicion de if ( nifdos=='t' )

si alguien tiene alguna idea .....
Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problemas con scanf

Publicado por javi (18 intervenciones) el 05/01/2002 19:31:39
Hola... yo cuando uso el scanf () antes de llamarla uso la funcion fflush(stdio) (creo q se llama asi) para limpiar el buffer de entrada...
Creo q lo q te pasa es q cuando llega al if ese el buffer no esta vacio y cuando hace la comparacion, no te lee lo ultimo q has introducido por el teclado.
Espero q te sirva
Un saludo
Javi
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con scanf

Publicado por Alexis Leung (70 intervenciones) el 06/01/2002 01:59:26
Bueno aquí te tengo una solución que yo mismo probé. Trata de reemplazar en la línea

scanf("%i",&nifdos);

por:

nifdos = getche();

(Recuerda poner #include <conio.h>)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con scanf

Publicado por [Sauron] (22 intervenciones) el 06/01/2002 02:38:06
No me funciona porque yo uso Linux para programar, y en linux no existe conio.h
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con scanf

Publicado por Googol (255 intervenciones) el 08/01/2002 10:27:29
El problema supongo que estará en que en el scanf has puesto que lo que quieres es leer enteros en decimal, octal o hexadecimal (con el %i), y lo que quieres realmente es leer una letra. En lugar de usar %i pon %c.

Espero que te ayude...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con scanf

Publicado por nafter (5 intervenciones) el 21/02/2002 06:44:43
necesitas que nifdos sea de tipo char no int, osea:

char nifdos;

tambien
scanf("%c," nifdos)
o tambien incluye la libreria <iostream.h>
y puedes sustituir scanf() por:

cinn>>nifdos;

¿mas facil no?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar