Ayuda para comparar una cadena con el nombre de una variable int

Iniciado por dato000, 6 Marzo 2011, 14:32 PM

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

dato000

Buenas, mi problema es el siguiente:

Estoy tratando de comparar una cadena (t_borrar) la cual representa el nombre de una tarea que debe borrarse dentro de una partición fija, y quiero que en el momento de que se capture la cadena, la tarea elegida para borrar (t1, t2, t3, t4, t5) sea borrada.

Pero no me ha salido:

esto es lo que tengo de momento:


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

using namespace std;

int main(){
   
        int opcion;
        void partFija();
        void partDinamica();
           
        //MENU DE BIENVENIDA 
        printf("\t\t BIENVENIDO: ");   
        printf("OPCIONES \n\n");
        printf("\t 1.    PARTICION FIJA  \n");
        printf("\t 2.    PARTICION DINAMICA  \n");
        printf("\t 3.    SALIDA   \n\n");
        printf("digite una de las opciones: ");
        scanf( "%i", &opcion);
       
        switch (opcion){
           
            case 1:
                printf("PARTICION FIJA \n\n");
                printf("NO HAY RELOCALIZACION \n\n");
                partFija();
               
                break;
           
            case 2:
                printf("PARTICION DINAMICA \n\n");
                partDinamica();
           
                break;
               
            case 3:
                break;
        }
       
        getchar(); 
        return EXIT_SUCCESS;
}

void partFija(){

         int t[5];
         int p[5]={20,15,20,10,30};
         printf("HOLA!!\n\n");
         
         //IMAGEN DE PARTICIONES
         printf("\n\n");
         printf("PARTICION FIJA\n");
         printf("-------------------   0\n");
         printf("|        SO       | \n");
         printf("-------------------   30\n");
         for(int i=0; i<5; i++){
            printf("|        p%i       | \n", i+1);
            printf("-------------------   %i\n", p[i]);
         }

         
          //INGRESO DE TAREAS
         printf("5 TAREAS MAXIMO \n\n");
         for(int i=0; i<5; i++){
            printf("TAREA %i:  ", i+1); scanf( "%i", &t[i]);
         }
         
         
         //INGRESO DE TAREAS EN PARTICIONES
         printf("\n\n");
         printf("PARTICION FIJA\n");
         printf("-------------------   0\n");
         printf("|        SO       | \n");
         printf("-------------------   30\n");
         for(int i=0; i<5; i++){   
            if(t[i]==0){
                printf("|        p%i       | \n", i+1);
                printf("|   ***********   | \n");
                printf("|     LIBRE: %i    | \n", p[i]);
                printf("-------------------   %i\n", p[i]);
            }
            else{   
                printf("|        p%i       | \n", i+1);
                printf("|   ***********   | \n");
                printf("|     Frag: %i    | \n", p[i]-t[i]);
                printf("-------------------   %i\n", p[i]);
            }
         }
       
         
         do{
               


********************************************PROBLEMA!!!!**************

                printf("\n\nQUE TAREA DESEA ELIMINAR??  ");
                char t_borrar[2]; scanf( "%s", t_borrar);
                printf("-------------------   0\n");
                printf("|        SO       | \n");
                printf("-------------------   30\n");
               
                for(int i=0; i<5; i++){
                   
                        if(t[i]==atoi(t_borrar)){
                            t[i]=0;
                        }
   
                        //IMAGEN DE PARTICIONES FIJAS CON TAREA RETIRADA
                        if(t[i]==0){
                            printf("|        p%i       | \n", i+1);
                            printf("|   ***********   | \n");
                            printf("|     LIBRE: %i    | \n", p[i]);
                            printf("-------------------   %i\n", p[i]);
                        }
                        else{   
                            printf("|        p%i       | \n", i+1);
                            printf("|   ***********   | \n");
                            printf("|     Frag: %i    | \n", p[i]-t[i]);
                            printf("-------------------   %i\n", p[i]);
                        }
                   
                 }
               
*****************************HASTA AQUI COMO LE HAGO???*******************



                 //El programa pregunta si quiere continuar
                 char opc;
                 fflush(stdin);
                 printf("\n\n\nDESEA RETIRAR OTRA TAREA?? (S/N) ");
                 scanf("%c", &opc);
                 if(opc=='n' or opc=='N')
                    break;
                 printf("\n\n");
                 
         }while(true);
         getchar();
               
         
             
}

void partDinamica(){
   
         printf("HOLA!! particion dinamica\n\n");
         
         
         getchar();   

}



gracias por cualquier ayuda, realmente necesito cualquier ayuda posible, ya me queme las pestañas, pero con el atoi se borran todas las tareas!!!!



diskontrol

Buenas,
Código (cpp) [Seleccionar]

if(t1= atoi(t_borrar)){
                    t1=0;
                }


si pones una asignación en la condición del if, se va a cumplir siempre. Además si t_borrar sólo la usas para compararla con enteros ¿por qué no la declaras cómo un entero? así te ahorras los atoi.

Saludos!
Siempre ten tus cosas cuando las necesites con @Dropbox. ¡Una cuenta de 2 GB es gratis! http://db.tt/YxRhsCI

dato000

#2
Cita de: diskontrol en  6 Marzo 2011, 16:37 PM
Buenas,
Código (cpp) [Seleccionar]

if(t1= atoi(t_borrar)){
                   t1=0;
               }


si pones una asignación en la condición del if, se va a cumplir siempre. Además si t_borrar sólo la usas para compararla con enteros ¿por qué no la declaras cómo un entero? así te ahorras los atoi.

Saludos!

Ah vale, siempre da true.

Pero como le hago para la comparación??

Un ejemplo, necesito borrar (igualar a cero) una tarea, puede ser t2. y quiero que pregunte,

que tarea desea borrar??? t2

quiero que capture esa cadena "t2" con el nombre de la variable t2 (no su valor), y ahora si, igualar el valor de t2 = 0.

Como le hago??

no se como puedo ser más claro y aclarar la duda, ayudenme.


--------------------------

na, ya no importa, ya lo solucione con otro modo.

Bueno, nos vemos.

si quieren saber que hice, fue preguntar de otra forma

fflush(stdin);
                printf("\n\nQUE TAREA DESEA ELIMINAR??  \n (Digite solo el numero de la tarea)  ");
                int borrar; scanf( "%i", &borrar);
                if(borrar == 1)
                    t[0]=0;
                else if(borrar == 2)
                    t[1]=0;
                else if(borrar == 3)
                    t[2]=0;
                else if(borrar == 4)
                    t[3]=0;
                else if(borrar == 5)
                    t[4]=0;



Pirata LOL

int strcmp(const char *s1, const char *s2) -- Compara las dos cadenas de caracteres s1 y s2.
pero si lo que quieres es descubrir si "el nombre de la variable entera" se encuentra en la cadena utiliza la funcion strncasecmp compara los primeros n caracteres de s1
(const char *s1, const char *s2, size_t n) ← algo asi, nose si eso te ayude o es lo que buscas  :-\
[center[/center]

dato000

Cita de: Pirata LOL en  7 Marzo 2011, 03:30 AM
int strcmp(const char *s1, const char *s2) -- Compara las dos cadenas de caracteres s1 y s2.
pero si lo que quieres es descubrir si "el nombre de la variable entera" se encuentra en la cadena utiliza la funcion strncasecmp compara los primeros n caracteres de s1
(const char *s1, const char *s2, size_t n) ← algo asi, nose si eso te ayude o es lo que buscas  :-\

pues lo solucione de otra forma, pero te importaria explicar mejor ese tema??

es decir, parece que manejas bien esto, no puedes explicar un poco más todo esto, y de paso, explicarme unas cosas con el printf, scanf, gets y sobre las clases y muchas más dudas??

strncasecmp?? const char?? men, eso es avanzado para mi, cuentame más men!!!



Pirata LOL

"const" proviene de ser constante es decir
al declararselo a una variable no podra ser modificado a lo largo del programa
"strncasecmp" es una de las tantas funciones que se usan con la libreria string.h y como dije antes compara los caracteres
a diferencia del strcmp que compara el contenido de la cadena completa
cadena s2 "nada"
si la cadena s1 tiene "el_foro_es_mi_mejor_prof"
con strncasecmp compara el ó foro ó es y asi... hasta encontrar similitud
con strcmp compara
s1 "el_foro_es_mi_mejor_prof"
s2 "nada"
luego de la comparacion devuelve un valor en el caso de la igualdad devuelve 0

investiga un poco usa google sale TODO  ;D
ó descargate un libro digital de los que hay en el foro
sin necesidad de buscar mucho http://foro.elhacker.net/programacion_cc/librospapers_cc-t296234.0.html  :-\
AHORA a realizar codigos y poco a poco iras corrigiendo errores y aprendiendo mas ::)
[center[/center]

dato000

Cita de: Pirata LOL en  7 Marzo 2011, 04:31 AM
"const" proviene de ser constante es decir
al declararselo a una variable no podra ser modificado a lo largo del programa
"strncasecmp" es una de las tantas funciones que se usan con la libreria string.h y como dije antes compara los caracteres
a diferencia del strcmp que compara el contenido de la cadena completa
cadena s2 "nada"
si la cadena s1 tiene "el_foro_es_mi_mejor_prof"
con strncasecmp compara el ó foro ó es y asi... hasta encontrar similitud
con strcmp compara
s1 "el_foro_es_mi_mejor_prof"
s2 "nada"
luego de la comparacion devuelve un valor en el caso de la igualdad devuelve 0

investiga un poco usa google sale TODO  ;D
ó descargate un libro digital de los que hay en el foro
sin necesidad de buscar mucho http://foro.elhacker.net/programacion_cc/librospapers_cc-t296234.0.html  :-\
AHORA a realizar codigos y poco a poco iras corrigiendo errores y aprendiendo mas ::)

por lo que entiendo, de todas maneras no me hubiera servido de mucho, pero como dije, me invente otra forma y ya supere lo del codigo, viejo, ahora tengo otra pregunta, sera mejor hacer otro post, pues es sobre otro tema, sobre como invocar otro metodo (partFija) como si fuera un archivo aparte, es decir, crear otro .cpp, y funcionara de la siguiente manera:

1) Solo main, invocando las funciones partFija y partDinamica
2) otro .cpp con la función partFija
3) otro. cpp con la función partDinamica

La verdad es que no se hacerlo, bueno, se que puedo hacerlo como libreria, haciendo un <include ....partFija.h>, pero puedo llamarlo como si fuera .cpp??