...Problema con scanf...
Publicado por Ronald (3 intervenciones) el 04/11/2007 02:19:52
Saludos...
Tengo un problema con el scanf bastante raro. Hice este ejemplo (c++) facil de entender que muestra el problema:
#include <stdio.h>
int main()
{
char letra;
int num;
do{
scanf("%d", &num);
if(num > 0)
printf("%s\n", "es mayor a cero");
else
printf("%s\n", "no es mayor a cero");
scanf("%c", &letra);
}while(letra != '*');
return 1;
}
Lo que hace, lee un numero y dice si es mayor que cero o no. A continuacion lee un caracter, si el caracter leido es asterisco * entonces se termina el programa, sino vuelve a leer un numero.
Bastante simple, pero los reto a que lo prueben y veran que luego de leer el caracter vuelve a imprimir "es mayor a cero" o "no es mayor a cero". Osea que para cada numero ingresado muestra dos veces si es mayor a cero o no.
Este comportamiento es el problema pues para mi oficio necesito que la cantidad de salidas sea exacto pues esta la almacena en un archivo y luego verificada por otro programa.
Este programa funciona sin problemas usando el iostream, asi:
#include <iostream>
int main()
{
char letra;
int num;
do{
std::cin >> num;
if(num > 0)
std::cout << "es mayor a cero\n";
else
std::cout << "es mayor a cero\n";
std::cin >> letra;
}while(letra != '*');
return 1;
}
Pero necesito usar scanf por sus funciones de formateado al igual que printf.
Bueno si es que alguien se ha topado con este problema y llego con la solucion por favor responder a este post.
Nos vemos...
Tengo un problema con el scanf bastante raro. Hice este ejemplo (c++) facil de entender que muestra el problema:
#include <stdio.h>
int main()
{
char letra;
int num;
do{
scanf("%d", &num);
if(num > 0)
printf("%s\n", "es mayor a cero");
else
printf("%s\n", "no es mayor a cero");
scanf("%c", &letra);
}while(letra != '*');
return 1;
}
Lo que hace, lee un numero y dice si es mayor que cero o no. A continuacion lee un caracter, si el caracter leido es asterisco * entonces se termina el programa, sino vuelve a leer un numero.
Bastante simple, pero los reto a que lo prueben y veran que luego de leer el caracter vuelve a imprimir "es mayor a cero" o "no es mayor a cero". Osea que para cada numero ingresado muestra dos veces si es mayor a cero o no.
Este comportamiento es el problema pues para mi oficio necesito que la cantidad de salidas sea exacto pues esta la almacena en un archivo y luego verificada por otro programa.
Este programa funciona sin problemas usando el iostream, asi:
#include <iostream>
int main()
{
char letra;
int num;
do{
std::cin >> num;
if(num > 0)
std::cout << "es mayor a cero\n";
else
std::cout << "es mayor a cero\n";
std::cin >> letra;
}while(letra != '*');
return 1;
}
Pero necesito usar scanf por sus funciones de formateado al igual que printf.
Bueno si es que alguien se ha topado con este problema y llego con la solucion por favor responder a este post.
Nos vemos...
Valora esta pregunta


0