Foros del Web » Programación para mayores de 30 ;) » C/C++ »

no respeta la funcion scanf cuando hago el ejecutable

Estas en el tema de no respeta la funcion scanf cuando hago el ejecutable en el foro de C/C++ en Foros del Web. hice el siguiente codigo para una calculadora de subneteo muy sencilla pero al tratar de meter los datos en el ejecutable no respeta los scanf ...
  #1 (permalink)  
Antiguo 28/05/2014, 18:44
 
Fecha de Ingreso: mayo-2014
Mensajes: 1
Antigüedad: 9 años, 10 meses
Puntos: 0
no respeta la funcion scanf cuando hago el ejecutable

hice el siguiente codigo para una calculadora de subneteo muy sencilla pero al tratar de meter los datos en el ejecutable no respeta los scanf y termina el programa sin dejarme acceder al llenado de los campos ayuda por favor es super urgente les dejo el codigo para que lo revisen
#include <math.h>
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
int rellenarocteto(int num);
int binarioadecimal(int octeto[7]);
int ts(int bits);
main(){

unsigned int octetoaux1,octetoaux2,octetoaux3,octuno, octdos, octtres, octcuatro, subredes,bprestados,totalsubredes,subredesutiles,t otalhost,hostutiles;
int octeto[7];
float baux;
char des= 'n',aux;
do{

printf("****** ***Bienvenido a la calculdora de subneteo ***********\n");
printf("\n1.- Inserta el primer octeto de la ip deseada\n");
scanf("%d",&octuno);
printf("\n2.- Inserta el segundo octeto de la ip deseada\n");
scanf("%d",&octdos);
printf("\n3- Inserta el tercer octeto de la ip deseada\n");
scanf("%d",&octtres);
printf("\n4- Inserta el ultimo octeto de la ip deseada\n");
scanf("%d",&octcuatro);
system("cls");
getch();
printf("\n Tu ip es la siguiente : %d.%d.%d.%d? s/n \n",octuno,octdos,octtres,octcuatro);
scanf("%c",&aux);
system("cls");

if(aux=='s'){
getch();
printf("\nInserta por favor la cantidad de subredes \n");
scanf("%d",&subredes);
system("cls");
baux=((log(subredes+2))/(log (2)));
bprestados= floor(baux);


if (octuno >= 1 && octuno <= 127 && subredes <=16777814 && subredes >0){
//mascara 255.0.0.0 16777214 max host o max subredes
if(bprestados <= 23){
if(bprestados <=8) {
octeto[7]=rellenarocteto(bprestados);
octetoaux3= binarioadecimal(octeto[7]);
octetoaux2= 0;
octetoaux1= 0;
}
if(bprestados >8 && bprestados <=16) {
octeto[7]=rellenarocteto(bprestados-8);
octetoaux3= 255;
octetoaux2= binarioadecimal(octeto[7]);
octetoaux1= 0;
}
if(bprestados >16 && bprestados <=23) {
octeto[7]=rellenarocteto(bprestados-16);
octetoaux3= 255;
octetoaux2= 255;
octetoaux1= binarioadecimal(octeto[7]);
}
totalsubredes=ts(bprestados);
totalhost=ts((24-bprestados));
subredesutiles=(totalsubredes-2);
hostutiles=(totalhost-2);
printf("\nPara la siguiente ip : %d.%d.%d.%d? s/n \n",octuno,octdos,octtres,octcuatro);
printf("\nSus valores son los siguientes:\n");
printf("\nClase: A\n");
printf("\nMascara por default: 255.0.0.0\n");
printf("\nNueva mascara: 255.%d.%d.%d\n",octetoaux3,octetoaux2,octetoaux1);
printf("\nBits prestados: %d\n",bprestados);
printf("\nTotal de subredes: %d\n",totalsubredes);
printf("\nTotal de host: %d\n",totalhost);
printf("\nSubredes utiles: %d\n",subredesutiles);
printf("\nHost utiles: %d\n",hostutiles);
getch();
//system("cls");
}

}
else if (octuno >= 128 && octuno <= 191 && subredes <=65534 && subredes >0){
//mascara 255.255.0.0 65534 maxhost o subredes
if(bprestados <= 16){
if(bprestados <=8) {
octeto[7]=rellenarocteto(bprestados);
octetoaux2= binarioadecimal(octeto[7]);
octetoaux1= 0;
}
if(bprestados >8 && bprestados <=15) {
octeto[7]=rellenarocteto(bprestados-8);
octetoaux2= 255;
octetoaux1= binarioadecimal(octeto[7]);
}
totalsubredes=ts(bprestados);
totalhost=ts((16-bprestados));
subredesutiles=(totalsubredes-2);
hostutiles=(totalhost-2);
printf("\nPara la siguiente ip : %d.%d.%d.%d? s/n \n",octuno,octdos,octtres,octcuatro);
printf("\nSus valores son los siguientes:\n");
printf("\nClase: B\n");
printf("\nMascara por default: 255.255.0.0\n");
printf("\nNueva mascara: 255.255.%d.%d\n",octetoaux2,octetoaux1);
printf("\nBits prestados: %d\n",bprestados);
printf("\nTotal de subredes: %d\n",totalsubredes);
printf("\nTotal de host: %d\n",totalhost);
printf("\nSubredes utiles: %d\n",subredesutiles);
printf("\nHost utiles: %d\n",hostutiles);
getch();
system("cls");

}

}
else if (octuno >= 192 && octuno <= 223 && subredes <=254 && subredes >0){
if(bprestados <= 7){
octeto[7]=rellenarocteto(bprestados);
octetoaux1= binarioadecimal(octeto[7]);
totalsubredes=ts(bprestados);
totalhost=ts((8-bprestados));
subredesutiles=(totalsubredes-2);
hostutiles=(totalhost-2);
printf("\nPara la siguiente ip : %d.%d.%d.%d? s/n \n",octuno,octdos,octtres,octcuatro);
printf("\nSus valores son los siguientes:\n");
printf("\nClase: C\n");
printf("\nMascara por default: 255.255.255.0\n");
printf("\nNueva mascara: 255.255.255.%d\n",octetoaux1);
printf("\nBits prestados: %d\n",bprestados);
printf("\nTotal de subredes: %d\n",totalsubredes);
printf("\nTotal de host: %d\n",totalhost);
printf("\nSubredes utiles: %d\n",subredesutiles);
printf("\nHost utiles: %d\n",hostutiles);
getch();
system("cls");
}
}
else if (octuno >= 224 && octuno <=255){

printf("\n Esta clase de ip no esta disponible en esta version.\n");
getch();
system("cls");
}
else {
printf("\nLos parametros son erroneos ¿Deseas salir de la calculadora? s/n \n");
scanf("%c",&des);
system("cls");
}
}
else{
printf("\nDeseas salir de la calculadora s/n \n");
scanf("%c",&des);
system("cls");
}
}
while(des=='n');{
getch();
}
}

int rellenarocteto(int num){
int conv[7],aux = 7, i=0;
for(i = 0; i <= num; i++);
{
conv[i]=1;
}
while(conv[aux]=!1)
{
conv[aux]=0;
aux--;
}
return conv[7];
}

int binarioadecimal(int octeto[7])
{
int res=0;
res= ((octeto[7]*(pow( 2, 0)))+(octeto[6]*(pow( 2, 1)))+(octeto[5]*(pow( 2, 2)))+(octeto[4]*(pow( 2, 3)))+(octeto[3]*(pow( 2, 4)))+(octeto[2]*(pow( 2, 5)))+(octeto[1]*(pow( 2, 6)))+(octeto[0]*(pow( 2, 7))));
return res;

}
int ts(int bits){
int res=0;
res=pow( 2, bits );
return res;
}
  #2 (permalink)  
Antiguo 28/05/2014, 21:11
Avatar de Drewermerc  
Fecha de Ingreso: febrero-2014
Mensajes: 185
Antigüedad: 10 años, 2 meses
Puntos: 5
Respuesta: no respeta la funcion scanf cuando hago el ejecutable

por lo que veo es que pasar incorrectamente el array a la funcione supongo que te tiene quedar un warning y bueno solo basta con poner el nombre del array supongo que hay esta el problemaa corrige eso y depues comenta si ya te funciono o sigue fallando.
Saludos.
Drewermerc.
  #3 (permalink)  
Antiguo 28/05/2014, 21:19
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: no respeta la funcion scanf cuando hago el ejecutable

Asi por encima creo que deberías cambiar los scanf scanf ( "%d", &variable ); por scanf ( "%d%*c", &variable ); ya que %*c hace que la cadena no contenga el \n que te puede generar errores.
Y otra cosa que veo es esta cantidad insana de getchs que usas :S. ¿¿¿Para que tantos getch()??? El error esta ahí fijo. si los usas para pausar hay otros sistemas.
Después ya se vería el resto de los problemas.
ya que usas el cls para limpiar la pantalla puedes usar el system("pause>nul"); pero realmente no me gusta nada el system para ese tipo de cosas.
Prueba eso que te dije... sustituyes los scanf ( "%d%*c", &variable ); y quita esos getch de ahí :S
  #4 (permalink)  
Antiguo 28/05/2014, 21:34
Avatar de Drewermerc  
Fecha de Ingreso: febrero-2014
Mensajes: 185
Antigüedad: 10 años, 2 meses
Puntos: 5
Respuesta: no respeta la funcion scanf cuando hago el ejecutable

muy cirto lo que dice vangodp y bue aunq ue ami nunca me han gustado las pausas en los programas lo que puede hacer es usar getchar() dos veces y tiene el mismo efecto.

Etiquetas: ejecutable, int, programa, proyecto
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:16.