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

Problema con array de caracteres

Estas en el tema de Problema con array de caracteres en el foro de C/C++ en Foros del Web. Hola, miren tengo un problema con una parte de un ejercicio que tengo que entregar, tengo que crear un menu con diversas opciones, por ahora ...
  #1 (permalink)  
Antiguo 02/12/2009, 09:24
 
Fecha de Ingreso: octubre-2009
Mensajes: 18
Antigüedad: 14 años, 6 meses
Puntos: 0
Problema con array de caracteres

Hola, miren tengo un problema con una parte de un ejercicio que tengo que entregar, tengo que crear un menu con diversas opciones, por ahora e conseguido la 1º opcion :D, pero la 2º opcion que es listar no me quiere funcionar y me muestra error :S

Código:
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <string.h>
#define FILAS 30
#define COLUMNA 2


int main()
{

    //variables
    
    char alumno[FILAS][COLUMNA][40];
    int notas[FILAS][3];
    int opcion;
    int i;
    char dni_a_buscar[10];
    int indicador=0;
    int proximo=0;
    
    
    //operaciones
    
    
    for(i=0;i<FILAS;i++)
    {
    strcpy(alumno[i][0],"*");
    }
    
    do
    {
            
    printf("\n\n----------Menu de Alumnos---------- ");
    printf("\n\n1.Anhiadir un alumno");
    printf("\n\n2.Lista los alumnos");
    printf("\n\n3.Borrar un alumno");
    printf("\n\n4.Buscar un alumno");
    printf("\n\n5.Modificar un alumno");
    printf("\n\n6.Salir");
    
    printf("\n\nIntroduce una opcion: ");
    _flushall();
    scanf("%i",&opcion);



    switch(opcion)
        {
        case 1: //aniadir un alumno
            
            proximo=-1;
            
            for(i=0;i<FILAS;i++)
            {
            
                if(strcmp(alumno[i][0],"*")==0)
                {
                proximo=i;
                break;
                }
            
            }
            
            if(proximo==-1)
            {
            printf("La tabla esta llena!!");
            }
            else
            {
                
                
                printf("Introduzca un DNI: ");
                _flushall();
                gets(alumno[proximo][0]);
                
                printf("Introduzca un Nombre: ");
                _flushall();
                gets(alumno[proximo][1]);
                
                printf("Introduzca Nota 1: ");
                _flushall();
                scanf("%i",&notas[proximo][0]);
                
                printf("Introduzca Nota 2: ");
                _flushall();
                scanf("%i",&notas[proximo][1]);
                
                printf("Introduzca Nota 3: ");
                _flushall();
                scanf("%i",&notas[proximo][2]);
                
            }
    
        case 2: //listar
        
            if(proximo=="*")
            {
            printf("\nEsta vacio");
            }
            else
            {
                for(i=0;i<FILAS;i++)
                {
                    if(strcmp(alumno[i][0],"*")==-1)
                    {
                    printf("%s",alumno[i][0]);
                    printf("%s"),alumno[i][1];
                    printf("%i"),notas[i][0];
                    printf("%i"),notas[i][1];
                    printf("%i",notas[i][2]);
                    }                
                }
            
            }
            
            break;
        } 
        
}while(opcion<6);
Espero que me puedan ayudar, se lo agradeceria mucho.

Un Saludo!
  #2 (permalink)  
Antiguo 02/12/2009, 11:03
Avatar de calathea  
Fecha de Ingreso: octubre-2008
Ubicación: Valladolid
Mensajes: 122
Antigüedad: 15 años, 6 meses
Puntos: 3
Respuesta: Problema con array de caracteres

hola zarkius!

El problema que tienes es que no te entra en el if dentro del bucle for que tienes puesto en la opción listar...

Tú tienes puesto:

Código c:
Ver original
  1. for(i=0;i<FILAS;i++)
  2.                 {
  3.                     if(strcmp(alumno[i][0],"*")==-1)
  4.                     {
  5.                     printf("%s",alumno[i][0]);
  6.                     printf("%s"),alumno[i][1];
  7.                     printf("%i"),notas[i][0];
  8.                     printf("%i"),notas[i][1];
  9.                     printf("%i",notas[i][2]);
  10.                     }                
  11.                 }

Te copio de aqui información acerca de la función strcmp:
Cita:
La función retorna un número entero mayor, igual, o menor que cero, apropiadamente según la cadena apuntada por s1 es mayor, igual, o menor que la cadena apuntada por s2.
Espero que te sirva de ayuda! ;)
  #3 (permalink)  
Antiguo 02/12/2009, 11:32
 
Fecha de Ingreso: octubre-2009
Mensajes: 18
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Problema con array de caracteres

Gracias calathea, pero sigo sin entender donde puede estar el fallo jejeje, soy un tanto nuevo en esto de prograna en C y me cuesta pillarlo jejej, si me pudiese ayudar a ver el fallo o como lo arreglarias te lo agradeceria.

Un Saludo!
  #4 (permalink)  
Antiguo 02/12/2009, 11:39
Avatar de calathea  
Fecha de Ingreso: octubre-2008
Ubicación: Valladolid
Mensajes: 122
Antigüedad: 15 años, 6 meses
Puntos: 3
Respuesta: Problema con array de caracteres

jeje no te preocupes

strcmp devolverá 0 cuando ambas cadenas de caracteres sean iguales... y devolverá un número mayor o menos que cero cuando estas sean distintas...una mayor que la otra...

Si te devuelve un numero menor que cero es que la primera cadena es más pequeña que la segunda...y mayor que cero si la primera cadena es mas grande que la segunda.

Yo personalmente solo manejo la opcion de que sea igual a cero o distinto de cero lo que me devuelva la funcion strcmp y en tu caso yo usaría lo siguiente:

Código c:
Ver original
  1. for(i=0;i<FILAS;i++)
  2.          {
  3.              if(strcmp(alumno[i][0],"*")!=0) //las cadenas no son iguales: el vector no está vacío
  4.              {
  5.                 printf("%s",alumno[i][0]);
  6.                 printf("%s"),alumno[i][1];
  7.                 printf("%i"),notas[i][0];
  8.                 printf("%i"),notas[i][1];
  9.                 printf("%i",notas[i][2]);
  10.               } //fin if              
  11.          }//fin for

Pruebalo a ver y me dices

Ah! y despues del case 1 se te olvidó poner un break...no se si en tu código lo tendrás bien puesto, pero en el que colgaste te falta, que sino despues de añadir un alumno te muestra todos los que tengas almacenados ;)
  #5 (permalink)  
Antiguo 02/12/2009, 12:15
 
Fecha de Ingreso: octubre-2009
Mensajes: 18
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Problema con array de caracteres

le puesto el break y me da error en la linea 100 :S
que es en el if primero que te pongo aki :S estare haciendo algo mal?

if(proximo=="*")
{
printf("\nEsta vacio");
}
else
{
for(i=0;i<FILAS;i++)
{
if(strcmp(alumno[i][0],"*")!=0)
{
printf("\n%s",alumno[i][0]);
printf("\n%s\n"),alumno[i][1];
printf("\n%i"),notas[i][0];
printf("\n%i"),notas[i][1];
printf("\n%i\n",notas[i][2]);
}
}

}
  #6 (permalink)  
Antiguo 02/12/2009, 12:26
Avatar de calathea  
Fecha de Ingreso: octubre-2008
Ubicación: Valladolid
Mensajes: 122
Antigüedad: 15 años, 6 meses
Puntos: 3
Respuesta: Problema con array de caracteres

Se me olvido comentarte antes ese detalle... perdon...

Tienes declarado proximo como int (número) y * es un carácter, osea, un tipo char...por tanto para solucionarlo puedes hacer un casting (estoy convirtiendo "*" en el número correspondiente a ese caracter):

if(proximo==(int)"*")

De todas formas, ahora mirándolo más a fondo y depurándolo yo, tienes mal puestos los paréntesis en la mayoría de los printf!!! Fijate en eso siempre!! q cuando pones un %i, %s, %c...etc la variable en la que están almacenados los datos que quieres imprimir van dentro del paréntesis, no fuera!

Código c:
Ver original
  1. if(proximo==(int)"*")
  2.             {
  3.             printf("\nEsta vacio");
  4.             }//fin if
  5.             else
  6.             {
  7.                 for(i=0;i<FILAS;i++)
  8.                 {
  9.                     if(strcmp(alumno[i][0],"*")>0)
  10.                     {
  11.                     printf("%s\n",alumno[i][0]);
  12.                     printf("%s\n",alumno[i][1]);
  13.                     printf("%i\n",notas[i][0]);
  14.                     printf("%i\n",notas[i][1]);
  15.                     printf("%i\n",notas[i][2]);
  16.                     } //fin if              
  17.                 }//fin for

He añadido un salto de linea después de imprimir cada dato para que no aparezcan pegados.
  #7 (permalink)  
Antiguo 02/12/2009, 16:18
 
Fecha de Ingreso: octubre-2009
Mensajes: 18
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Problema con array de caracteres

Gracias!!! ya me tira, lo que no me queda muy claro, por que ya te digo es que soy muy torpe, el strcmp :S se que sirve para comparar, pero no tengo muy claro como se diria hablado con palabra, no se si me entiendes jejeje

Un Saludo!
  #8 (permalink)  
Antiguo 04/12/2009, 11:10
Avatar de calathea  
Fecha de Ingreso: octubre-2008
Ubicación: Valladolid
Mensajes: 122
Antigüedad: 15 años, 6 meses
Puntos: 3
Información Respuesta: Problema con array de caracteres

A ver si consigo explicarte lo que entendido que necesitas saber sobre strcmp:

strcmp se utiliza para comparar cadenas de caracteres (string compare) y tiene la siguiente estructura:

int strcmp(const char *s1, const char *s2);

Esto quiere decir que la funcion strcmp devuelve un número entero en función de los resultados obtenidos en la comparación:
  • 0: las dos cadenas de caracteres pasadas como parámetro (es decir, en los paréntesis - en el ejemplo son s1 y s2- ) son exactamente iguales
    Ejemplo:
    Código c:
    Ver original
    1. char cadena1[20];
    2. char cadena2[20];
    3. int num;
    4.  
    5. strcpy(cadena1, "Soy la cadena 1"); //copio en cadena1 el texto "Soy la cadena 1"
    6. strcpy(cadena2, "Soy la cadena 1"); //copio en cadena2 el texto "Soy la cadena 1"
    7.  
    8. num = strcmp(cadena1, cadena2); //en num se alamacena el resultado devuelto por strcmp
    9.  
    10. if(num == 0) //como hemos alamacenado el mismo texto en cadena1 y en cadena2, entrará en el if (num tendrá almacenado el valor 0)
    11. printf("Son iguales\n");
    12. else
    13. printf("Son distinstas\n");
    14.  
    15. system("Pausa");
  • distinto de 0: las dos cadenas de caracteres son distintas
    Ejemplo (igual que el anterior solo que ahora vamos a meter un texto diferente en cada cadena):
    Código c:
    Ver original
    1. char cadena1[20];
    2. char cadena2[20];
    3. int num;
    4.  
    5. strcpy(cadena1, "Soy la cadena 1"); //copio en cadena1 el texto "Soy la cadena 1"
    6. strcpy(cadena2, "No soy la cadena 1"); //copio en cadena2 el texto "No soy la cadena 1"
    7.  
    8. num = strcmp(cadena1, cadena2); //en num se alamacena el resultado devuelto por strcmp
    9.  
    10. if(num == 0) //como no hemos alamacenado el mismo texto en cadena1 y en cadena2, no entrará en el if (num tendrá almacenado un valor distinto de 0)
    11. printf("Son iguales\n");
    12. else  //entrará entonces en el else
    13. printf("Son distinstas\n");
    14.  
    15. system("Pausa");
    1. < 0: la cadena s1 es menor que la cadena s2
    2. > 0: la cadena s1 es mayor que la cadena s2

Espero que así te haya quedado más claro...porque esque está función no tiene mucho más que explicar...
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 04:19.