Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - DickGumshoe

#401
Cito la parte donde tienes problemas:

Código (cpp) [Seleccionar]
srand(time(NULL));
   int n, i, num[f];
   for(i = 0; i < f; i++)
   {
      do  // porque este do acá?
       n = 1 + rand() % 10;  //especificamente qué hace el simbolo % acá?
       while(checkrep(n, num)); // tenia entendido que luego de while se abrian llaves, por qué acá no hay?


Ese do va con el while de debajo (es un bucle do-while). Entonces, hace
n = 1 + rand() % 10;

mientras (checkrep(n, num));

El % va ahí porque forma parte de la función rand en ese caso. Si pusieras
n=rand(), te calcularía cualquier número aleatoriamente. Poniendo detrás de rand() un signo de % y posteriormente un número, el ordenador piensa un número  desde el 0 hasta el número que has introducido.

En el while no van las llaves, porque, como dije antes, es un bucle do-while. Si fuera un bucle while, sí sería con llaves (Ojo, que el bucle do-while también puede llevar llaves, pero en este caso, como no tiene que ejecutar muchas sentencias, no hacen falta).

Espero haberte ayudado.

Saludos.

#402
¿Me podrías pasar tu código? Si es así, intentaré ver cuál es el error y eso.

Saludos.

EDITO:

Comparando el dato que mete con ("") sí sale. Mira:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main(){
    char dato[20];
    do{
   
    printf("<<<");
    gets(dato);
    }
    while(strcmp(dato,"")==0);
   
    system("pause");
    return 0;
}



Espero haberte ayudado.

Saludos!
#403
No estoy seguro, pero si el bucle se repite cuando el usuario no mete ningún dato, puedes probar a que se repita cuando el usuario introduce ("")

Pero repito, soy novato, y no sé si es así realmente.

Saludos.
#404
Programación C/C++ / Re: Comparando cadenas
25 Enero 2012, 17:56 PM
Ahora tengo esto:

/*Un programa que pida 10 nombres y los memorice. Después deberá pedir que se teclee
un nombre y dirá si se encuentra o no entre los 10 que se han tecleado antes. Volverá
a pedir otro nombre y a decir si se encuentra entre ellos, y así sucesivamente hasta que
se teclee "fin".*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){
   
    char nombre[10][20], aux[20];
int i;
    //aux es el nombre que comprobaremos si esta en la lista o no
 
    //damos un valor a 10 nombres
   
    for (i=0;i<10;i++){
    printf("Introduce un nombre");
    gets(nombre[i]);
    }
   
   
   
    //ERROR, todo lo que comparo sale como que se encuentra entre los anteriores
    do{
    printf("Introduce un nombre para comprobar si se encuentra entre los anteriores");
    gets(aux);
    for (i=0;i<10;i++){
    if((strcmp(nombre[i],aux)==0)){
                                    printf("El nombre se encuentra entre los anteriores\n");
                                    break;
}   
    else printf("El nombre no se encuentra entre los anteriores\n");
    break;
}
    }
    while((strcmp(aux, "fin")!=0));
   
    system("pause");
    return 0;
   
}


Lo que he editado ha sido el bucle for del final, y ahora, introduzco diez nombres. Cuando pongo el que quiero comprobar:

- Si es el que he metido primero (el que equivale a nombre[0]), sale como que lo he introducido --> Correcto
- Todos los demás salen como que no los había introducido...

Gracias.

Saludos.
#405
Programación C/C++ / Re: Comparando cadenas
24 Enero 2012, 23:38 PM
El código es:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){
   
    char nombre[10][20], aux[20];
int i;
    //aux es el nombre que comprobaremos si esta en la lista o no
 
    //damos un valor a 10 nombres --> ERROR
   
    for (i=0;i<10;i++){
    printf("Introduce un nombre");
    gets(nombre[i]);
    }
   
   
   
    //ERROR, todo lo que comparo sale como que se encuentra entre los anteriores
    do{
    printf("Introduce un nombre para comprobar si se encuentra entre los anteriores");
    gets(aux);
    if((strcmp(nombre[0],aux)||
    strcmp(nombre[1],aux)||
    strcmp(nombre[2],aux)||
    strcmp(nombre[3],aux)||
    strcmp(nombre[4],aux)||
    strcmp(nombre[5],aux)||
    strcmp(nombre[6],aux)||
    strcmp(nombre[7],aux)||
    strcmp(nombre[8],aux)||
    strcmp(nombre[9],aux))!=0) printf("El nombre se encuentra entre los anteriores\n");
    else printf("El nombre no se encuentra entre los anteriores\n");
 
    }
    while((strcmp(aux, "fin")!=0));
   
    system("pause");
    return 0;
   
}


Y ya no tengo ese problema. Ahora siempre dice que el nombre se ha encontrado entre los 10 primeros...

Gracias
#406
Programación C/C++ / Re: Comparando cadenas
24 Enero 2012, 22:36 PM
Muchas gracias a todos.

Ahora me compila, pero al introducir los 10 nombres, dice: 10nombre.exe dejó de funcionar. Windows está buscando una solución al problema...

Gracias.

Saludos.
#407
Programación C/C++ / Re: Comparando cadenas
23 Enero 2012, 22:40 PM
Incluso quitando el [20] del final, me da errores.

Ahora tengo este código:

int main(){
   
    char nombre[10][20], i, aux;
    //aux es el nombre que comprobaremos si esta en la lista o no
 
    //damos un valor a 10 nombres --> ERROR
   
    for (i=0;i<=10;i++){
    printf("Introduce un nombre");
    gets(nombre[i]);
    }
   
   
   
   
    //ERROR, todo lo que comparo sale como que se encuentra entre los anteriores
    do{
    printf("Introduce un nombre para comprobar si se encuentra entre los anteriores");
    gets(aux);
    if((strcmp(nombre[0],aux)||
    strcmp(nombre[1],aux)||
    strcmp(nombre[2],aux)||
    strcmp(nombre[3],aux)||
    strcmp(nombre[4],aux)||
    strcmp(nombre[5],aux)||
    strcmp(nombre[6],aux)||
    strcmp(nombre[7],aux)||
    strcmp(nombre[8],aux)||
    strcmp(nombre[9],aux))!=0) printf("El nombre se encuentra entre los anteriores\n");
    else printf("El nombre no se encuentra entre los anteriores\n");
 
    }
    while((strcmp(n11, "fin")!=0));
   
    system("pause");
    return 0;
   
}


Los errores que me da el compilador están todos en el do-while.

Son:


27 invalid conversion from `char' to `char*'

27  initializing argument 1 of `char* gets(char*)'

28 invalid conversion from `char' to `const char*'

28 initializing argument 2 of `int strcmp(const char*, const char*)'


Hay más, pero son exactamente iguales (para cada comparación me da esos errores que acabo de poner).

Muchas gracias.

Saludos.

#408
Programación C/C++ / Re: Problema con strcat
23 Enero 2012, 22:28 PM
Muchas gracias a todos por responder. Me habéis aclarado las dudas muy bien.

Saludos.
#409
Programación C/C++ / Re: Comparando cadenas
22 Enero 2012, 18:01 PM
Bueno, he editado mi código fuente con nombres más descriptivos y con comentarios.

/*Un programa que pida 10 nombres y los memorice. Después deberá pedir que se teclee
un nombre y dirá si se encuentra o no entre los 10 que se han tecleado antes. Volverá
a pedir otro nombre y a decir si se encuentra entre ellos, y así sucesivamente hasta que
se teclee "fin".*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){
   
    char nombre[10][20], i, aux;
    //aux es el nombre que comprobaremos si esta en la lista o no
 
    //damos un valor a 10 nombres --> ERROR
    do{
    for (i=0;i<=10;i++){
    printf("Introduce un nombre");
    gets(nombre[i][20]);
    }
    }
    while(nombre!=nombre[9][20]);
   
   
    //ERROR, todo lo que comparo sale como que se encuentra entre los anteriores
    do{
    printf("Introduce un nombre para comprobar si se encuentra entre los anteriores");
    gets(aux);
    if((strcmp(nombre[0][20],aux)||
    strcmp(nombre[1][20],aux)||
    strcmp(nombre[2][20],aux)||
    strcmp(nombre[3][20],aux)||
    strcmp(nombre[4][20],aux)||
    strcmp(nombre[5][20],aux)||
    strcmp(nombre[6][20],aux)||
    strcmp(nombre[7][20],aux)||
    strcmp(nombre[8][20],aux)||
    strcmp(nombre[9][20],aux))!=0) printf("El nombre se encuentra entre los anteriores\n");
    else printf("El nombre no se encuentra entre los anteriores\n");
   
    }
    while((strcmp(n11, "fin")!=0));
   
    system("pause");
    return 0;
   
}



Por lo que parece, el error está en que en gets no puedo poner
gets(nombre[i][20]);
Aunque no estoy seguro.

Muchísimas gracias.

Saludos.
#410
Programación C/C++ / Re: Problema con strcat
22 Enero 2012, 17:46 PM
Ah, vale, se me había olvidado ponerlo.

Con sprintf, que queda bien el resultado, tengo esto:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){
   
   char nombre[40],aux[60];
   char dia[3],mes[3];
   
   printf("Introduce tu nombre");
   gets(nombre);
   
   printf("Introduce el dia en que naciste");
   gets(dia);
   
   printf("Introduce el mes en que naciste");
   gets(mes);
   sprintf(aux,"%s, nacido el %s/%s",nombre,dia,mes);
   
   
   
   printf("%s\n",aux);
   
   system("pause");
   return 0;
}


Pero, con strcat, me salen caracteres extraños antes del nombre:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){
   
   char nombre[40],aux[60];
   char dia[3],mes[3];
   
   printf("Introduce tu nombre");
   gets(nombre);
   
   printf("Introduce el dia en que naciste");
   gets(dia);
   
   printf("Introduce el mes en que naciste");
   gets(mes);
   
   strcat(aux, nombre);
   strcat(aux, ", nacido el ");
   strcat(aux, dia);
   strcat(aux, "/");
   strcat(aux, mes);
   
   printf("%s\n",aux);
   
   system("pause");
   return 0;
}


EDITO: Estaba intentándolo, y al declarar la variable aux, he puesto esto:

aux[60]={};

Y ahora me sale bien. ¿Será porque no le di antes un valor a aux?

Gracias.

Saludos.