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

como almacenar un int?

Estas en el tema de como almacenar un int? en el foro de C/C++ en Foros del Web. Bueno, tengo una asignacion de la universidad y tengo el codigo hecho pero me esta dando un error ==> "Segmentation fault (core dumped)" <== y ...
  #1 (permalink)  
Antiguo 18/09/2007, 09:05
 
Fecha de Ingreso: septiembre-2006
Mensajes: 328
Antigüedad: 18 años, 2 meses
Puntos: 3
como almacenar un int?

Bueno, tengo una asignacion de la universidad y tengo el codigo hecho pero me esta dando un error ==> "Segmentation fault (core dumped)" <== y CREO que el problema esta en la asignacion en el ciclo for, lo que quiero es saber que es lo que tiene mal y cual es la forma correcta de hacerlo, porque la verdad es que soy un tanto principiante en esto. El programa deberia recibir por la linea de comandos -o terminal- el numero del interruptor cuyo estado sea 1, donde 1 = abierto. Se asume que todos los interruptores estan cerrados si no se da ningun parametro y son 4 interruptores.

Código:
#include <stdio.h>
#include <stdlib.h>

int main (int argc, char *argv[]) { 

    int a[3], cont;
    int argcont=1;
    
    for (cont=0; cont< argc; cont++) {

        a[cont]= atoi(argv[argcont]);
        argcont++;
    }

    int S1=0, S2=0, S3=0, S4=0;

    if (a[0]==0 || a[1]==0 || a[2]==0 || a[3]==0) { printf("No existe el interruptor 0\n"); }
    if (a[0]==1 || a[1]==1 || a[2]==1 || a[3]==1) { S1=1; }
    if (a[0]==2 || a[1]==2 || a[2]==2 || a[3]==2) { S2=1; }
    if (a[0]==3 || a[1]==3 || a[2]==3 || a[3]==3) { S3=1; }
    if (a[0]==4 || a[1]==4 || a[2]==4 || a[3]==4) { S4=1; }
        

    printf("El estado de los interruptores es:\n");
    
    if (S1==1) { printf("\tS1:ON\n"); } else { printf("\tS1:OFF\n"); }
    if (S2==1) { printf("\tS2:ON\n"); } else { printf("\tS2:OFF\n"); }
    if (S3==1) { printf("\tS3:ON\n"); } else { printf("\tS3:OFF\n"); }
    if (S4==1) { printf("\tS4:ON\n"); } else { printf("\tS4:OFF\n"); }

    if ( (S1==1) && ( (S2==1) || (S3==1) || (S4==1) )) {
    
        printf("===>\t BOMBILLO: ON\t<===\n"); 
    } else {
        printf("===>\t BOMBILLO: OFF\t<===\n");
    }

    printf("En la ejecucion, se ha asumido que los switches estan cerrados a menos que su numero sea suministrado por la linea comando.\n");
    return 0;
}
Esta es la pagina donde esta toda la informacion del programa;
http://www.geocities.com/yoyirod/Web.../TareaL01.html

Tambien hay un ejecutable proporcionado por el profesor sobre como deberia de funcionar el programa: http://yoyirod.googlepages.com/demoTL01.exe -el ejecutable tambien esta en la pagina del programa-.
  #2 (permalink)  
Antiguo 18/09/2007, 14:06
 
Fecha de Ingreso: septiembre-2006
Mensajes: 328
Antigüedad: 18 años, 2 meses
Puntos: 3
Re: como almacenar un int?

Bueno despues de mucho llorar al fin lo he terminado, habian 2 problemas, el primero es que el arreglo de a debe ser 4 en vez de 3 y el ciclo debe ejecutarse mientras cont < (argc-1) de manera que mi codigo final es asi:

Código:
#include <stdio.h>
#include <stdlib.h>

int main (int argc, char *argv[]) { 

    int a[4], cont=0, argcont=1;
    int S1=0, S2=0, S3=0, S4=0;
    
    if (argc> 5) { 
        printf("Solo teclee el nombre del programa seguido de no mas de 4 interruptores\n");
        return 1;
    }

    for (cont=0; cont< (argc-1); cont++) {

        a[cont]= atoi(argv[cont+1])
        
        if ( (a[cont]<= 0) || (a[cont]> 4) ) {
            printf("Uno de los interrruptores no existe\n"); 
            return 2; 
        }
    }

    if (a[0]==1 || a[1]==1 || a[2]==1 || a[3]==1) { S1=1; }
    if (a[0]==2 || a[1]==2 || a[2]==2 || a[3]==2) { S2=1; }
    if (a[0]==3 || a[1]==3 || a[2]==3 || a[3]==3) { S3=1; }
    if (a[0]==4 || a[1]==4 || a[2]==4 || a[3]==4) { S4=1; }
        

    printf("El estado de los interruptores es:\n");
    
    if (S1==1) { printf("\tS1:ON\n"); } else { printf("\tS1:OFF\n"); }
    if (S2==1) { printf("\tS2:ON\n"); } else { printf("\tS2:OFF\n"); }
    if (S3==1) { printf("\tS3:ON\n"); } else { printf("\tS3:OFF\n"); }
    if (S4==1) { printf("\tS4:ON\n"); } else { printf("\tS4:OFF\n"); }

    if ( (S1==1) && ( (S2==1) || (S3==1) || (S4==1) )) {
    
        printf("===>\t BOMBILLO: ON\t <===\n"); 
    } else {
        printf("===>\tBOMBILLO: OFF\t <===\n");
    }

    printf("\nEn la ejecucion, se ha asumido que los switches estan cerrados a menos que su numero sea suministrado por la terminal.\n");
    return 0;
}
  #3 (permalink)  
Antiguo 18/09/2007, 14:28
Avatar de _Lucifer_  
Fecha de Ingreso: junio-2006
Mensajes: 1.662
Antigüedad: 18 años, 5 meses
Puntos: 28
Re: como almacenar un int?

Bueno....no lei mucho el programa, pero si te das cuenta declaras el arreglo "a" de 3 elementos, lo cual quiere decir que sus índices van de 0 a 2 y tu estas usando a[3] en algunas partes de tu programa.
Código:
 int a[3], cont;
Para arreglar eso debes declarar "a" con una mayor capacidad:
Código:
 int a[4], cont;
Saludos
__________________
Si crees que no tiene sentido, etonces probablemente lo tenga... :arriba:
  #4 (permalink)  
Antiguo 18/09/2007, 14:39
 
Fecha de Ingreso: septiembre-2006
Mensajes: 328
Antigüedad: 18 años, 2 meses
Puntos: 3
Re: como almacenar un int?

Eso ya lo habia puesto en el post anterior, yo mismo me respondi a los distintos problemas que tenia el codigo. Los administradores pueden marcar este post como respondido.

Ademas de los problemas que impedian que el programa corriera habian otros errores que hacian que el programa se comportara de manera extraña, si leen los 2 codigos se daran cuenta de las diferencias.
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 14:00.