|
401
|
Programación / Programación C/C++ / Re: [C++ Linux] Explicación de codigo [Principiante]
|
en: 28 Enero 2012, 17:15 pm
|
Cito la parte donde tienes problemas: 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
|
Programación / Programación C/C++ / Re: Control input...¿Enter?
|
en: 28 Enero 2012, 14:40 pm
|
¿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{ } return 0; }
Espero haberte ayudado. Saludos!
|
|
|
403
|
Programación / Programación C/C++ / Re: Control input...¿Enter?
|
en: 28 Enero 2012, 13:49 pm
|
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 / Programación C/C++ / Re: Comparando cadenas
|
en: 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"); } //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"); 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)); 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 / Programación C/C++ / Re: Comparando cadenas
|
en: 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"); } //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"); 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)); 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 / Programación C/C++ / Re: Comparando cadenas
|
en: 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 / Programación C/C++ / Re: Comparando cadenas
|
en: 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"); } //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"); 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)); 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.
|
|
|
409
|
Programación / Programación C/C++ / Re: Comparando cadenas
|
en: 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"); } } 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"); if((strcmp(nombre [0][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)); return 0; }
Por lo que parece, el error está en que en gets no puedo poner
Aunque no estoy seguro. Muchísimas gracias. Saludos.
|
|
|
410
|
Programación / Programación C/C++ / Re: Problema con strcat
|
en: 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"); printf("Introduce el dia en que naciste"); printf("Introduce el mes en que naciste"); sprintf(aux ,"%s, nacido el %s/%s",nombre ,dia ,mes ); 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"); printf("Introduce el dia en que naciste"); printf("Introduce el mes en que naciste"); 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.
|
|
|
|
|
|
|