Ayuda

Iniciado por Luckim, 30 Julio 2012, 17:07 PM

0 Miembros y 1 Visitante están viendo este tema.

Luckim

Como hago para que la funcion sea llamada del menu y del ciclo?

Dejo codigo:

#include<conio.h>
#include<stdio.h>
#include<iostream>


void menu(int*);
void carga(int*);
void pto1(int*);
void pto2(char*);
void pto3();
void pto4();

int main()
{
     //Datos registrados
    char s1[]="asd";
    char s2[]= "asd2";


    //Verificacion de datos
    char usuario[32];
    char contrasena[32];

    //Enteros
    int i,k,j,opcion;


    //Comienzo para los intentos de contraseña, maximo 3
    for(i=1; i<=3; i++)
    {

        printf("\nIngrese usuario: ");
        scanf("%s",usuario);
        k = strcmp( s1, usuario );


        if (k != 0)
        {
            printf("\nUsuario incorrecto\n");


        }


        if(k == 0)
        {
            printf("\nIngrese contrasena: ");
            scanf("%s",contrasena);
            j = strcmp( s2, contrasena);

            if (j == 0)
            {
                system("cls");
                printf("\nDatos correctos\n");
                printf("\nBienvenido al programa del servicio penintenciario\n");
                printf("\n");
                printf("\n");
                menu(&opcion);
                while(opcion !=9)
                  {
                      switch(opcion)
                      {
                                    case 1 : printf("Cargad de datos");
                                             carga(&opcion);
                                             break;
                                             
                                    case 2 : printf("entro a la rta 1");
                                             pto1(&opcion);
                                             break;
                                             
                                    case 3 : printf("entro a la rta 2");
                                             pto2(&nom);
                                             break;
                                             
                                    case 4 : printf("Entro a la rta 3");
                                             break;
                                   
                                    case 5 : printf("Entro a la rta 4");
                                             break;
                                            }
                                            getch();
                                            system("cls");
                      menu(&opcion);
                      }
                      return 0;
                      }


                getch();


            }

            if(j != 0)
            {
                printf("\ncontrasena incorrecta\n");


            }
        }




    }

     
                     
     void menu(int * a)
     {
          printf("1-Cargar datos\n");
          printf("2-Respuesta 1\n");
          printf("3-Respuesta 2\n");
          printf("4-Respuesta 3\n");
          printf("5-Respuesta 4\n");
          printf("9-Salir\n");
          printf("\nOpcion: ");
          scanf("%d",a);
     }
     
     void carga(int * a)
     {
         
         
          int i,f,c,e,np,nc,ll,ct,mll[11][41]={0},mct[11][41]={0},nr,cont,x;
          char nom[32];
         
          for(i=1;i<2;i++)
          {
                           for(f=1;f<=2;f++)
                           {
                                             printf("\nIngrese numero de piso: ");
                                             scanf("%d",&np);
                                             printf("\nIngrese numero de celda: ");
                                             scanf("%d",&nc);
                                             printf("\nIngrese numero de lugares libres: ");
                                             scanf("%d",&ll);
                                             printf("\nIngrese capacidad total: ");
                                             scanf("%d",&ct);
                                             mll[np][nc]=ll;
                                             mct[np][nc]=ct;
                                             }
                                             }
                                             printf("\nIngrese numero de recluso: ");
                                             scanf("%d",&nr);
                                             
                                             while(nr!=0)
                                             {
                                                         printf("\nIngrese nombre del recluso: ");
                                                         scanf("%s",nom);
                                                         x=0;
                                                         
                                                         for(c=1;c<=10;c++)
                                                         {
                                                                           for(e=1;e<=40;e++)
                                                                           {
                                                                                             if(mll[c][e]>0 && x==0)
                                                                                             {
                                                                                                            x=1;
                                                                                             }
                                                                                             else
                                                                                             {
                                                                                                 mll[c][e]=mll[c][e]-1;
                                                                                             }
                                                                           }
                                                         }
                                                         
                                                         if(x==0)
                                                         {
                                                              pto2(&nom);   
                                                         }
                                                         else
                                                         {
                                                             cont=cont+1;
                                                             pto1(&cont);
                                                         }
                                                         printf("\nIngrese numero de recluso ");
                                                         scanf("%d",&nr);
                                             }
                           
                                             
                                             
     }
     
     //Punto 1
     
     void pto1(int * a)
     {
          printf("%d no pudieron se alojados por falta de lugar",a);
     }
     
     //Punto 2
     
     void pto2(char * a)
     {
          printf("Los rechazados son: \n%d\n",a);
     }
                                                                 
     //Punto 3

void pto3()
{
    int f;
    for(f=1; f<=10; f++)
    {
        int c;
        for(c=1; c<=40; c++)
        {
                     d[f]=(d[f]+(e[f][c]))-(g[f][c]);
        }
            if(d[f] > 0)
            {
                printf("Para el piso %d, la celda %d tiene aun disponibilidad\n",f,c);
            }
        }
    }

//Punto 4

void pto4()
{
   
    int Max=d[1];
    int aux=1;

    int i;
    for(i=1; i<=10; i++)
    {
        if(d[i] > Max)
        {
            Max=d[i];
            aux=i;
        }
    }


    for(i=aux; i<=aux; i++)
    {
        if(d[i]==Max)
        {
            printf("El piso mas lleno es el piso %d\n",i);
        }
    }
}

ecfisa

CitarComo hago para que la funcion sea llamada del menu y del ciclo?

Hola Luckim.

No sé a cuál de las 6 funciónes de tu código te refieres, pero creo que te estas complicando con la verificación de nombre y contraseña...

Fijate si de este modo no te resulta mas simple:

...
int main()
{
 char s1[]="asd";
 char s2[]= "asd2";
 char usr[32], pwd[32];
 int intentos=0, ingresa=0;

 do {
   system("cls");
   printf("Usuario: "); fscanf(stdin,"%32s",&usr);
   printf("\nClave: "); fscanf(stdin,"%32s",&pwd);
   if (strcmp(usr, s1)!= 0 || strcmp(pwd, s2) != 0)
     intentos += 1;
   else
     ingresa = 1;
 } while (intentos < 3 && !ingresa);

 if (!ingresa) /* agoto los intentos, salir */
   return 0;

 /* Comenzar el programa */
 printf("Bienvenido al programa del servicio penintenciario");
 ...
}


Saludos.

rir3760

Un detalle.

Cuando se llama a scanf/fscanf, por ejemplo:
char usr[32], pwd[32];
int intentos=0, ingresa=0;

do {
system("cls");
printf("Usuario: "); fscanf(stdin,"%32s",&usr);
printf("\nClave: "); fscanf(stdin,"%32s",&pwd);

Al utilizar el especificador de formato "%Ns" se le indica a la función que almacene, a partir de la dirección indicada, un máximo de N caracteres y a continuación un '\0' para indicar el fin de la cadena.

Por ello las llamadas a "fscanf" (mejor "scanf") deberían ser:
printf("Usuario: "); fscanf(stdin,"%31s",&usr);
printf("\nClave: "); fscanf(stdin,"%31s",&pwd);


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language