|
1281
|
Programación / Programación C/C++ / LISTA DOBLE
|
en: 29 Septiembre 2012, 12:30 pm
|
Tengo el problema en una lista doblemente enlazada que no me imprime al reves, es decir de abajo a arriba, es más se suele colgar al final. Y no pillo el fallo: #include <stdio.h> #include <stdlib.h> #include <string.h> struct lista_elementos { char elem[40]; struct lista_elementos *sig; struct lista_elementos *ant; }; typedef struct lista_elementos nodo; void crear(nodo *registro,nodo *fin,nodo *anterior); void mostrar_abajo(nodo *pt); void mostrar_arriba(nodo *pt); int main() { nodo *prin,*fin; prin =(nodo *)malloc(sizeof(nodo )); fin =(nodo *)malloc(sizeof(nodo )); crear(prin,fin,NULL); mostrar_abajo(prin); mostrar_arriba(fin); } void crear(nodo *registro,nodo *fin,nodo *anterior) { printf("Dato (Escribir LEOSANSAN para terminar): "); scanf(" %s",registro ->elem ); if (strcmp(registro ->elem ,"LEOSANSAN")==0) { registro->sig=NULL; registro->ant=anterior; fin=registro; } else { registro ->sig =(nodo *)malloc(sizeof(nodo )); registro->ant=anterior; crear(registro->sig,fin,registro); } } void mostrar_abajo(nodo *pt) { if (pt->sig!=NULL) { mostrar_abajo(pt->sig); } } void mostrar_arriba(nodo *pt) { if (pt->ant==NULL) else { mostrar_arriba(pt->ant); } }
Gracias desde ahora y saludos!.
|
|
|
1282
|
Programación / Programación C/C++ / Re: Duda con scanf
|
en: 29 Septiembre 2012, 12:24 pm
|
En un ejemplo de un codigo en un libro que estoy leyendo, me he encontrado con esta linea:
La parte que no entiendo es la de "%[\n]", creo que sirve para guardar la linea de texto introducida en el array linea, Como te han comentado, "entra" todo en el scanf y a diferencia de éste que sólo entra hasta encontrar un espacio en blanco, o si introduces 123asd y el scanf tiene en su formato %d sólo coge el número, ahora la cadena linea puede contener espacios en blanco. Como ejemplo, y aprovechando el otro hilo de scanf sin fflush, puedes probar 123asd asd. Te dejo éste código:#include <stdio.h> int main(){ char linea [80]; char ch1, ch2; scanf("%[^\n]%*c", linea ); printf("%c %c %s\n", ch1 , ch2 ,linea ); return 0; }
Te dejo esta referencia http://beej.us/guide/bgc/output/html/multipage/scanf.htmlSaludos
|
|
|
1284
|
Programación / Programación C/C++ / Re: Duda de cadena de caracteres en C
|
en: 28 Septiembre 2012, 21:38 pm
|
Reservas 80 bytes para nombre, y permites que se ingresen 100 caracteres con fgets().
LAS PRISAS SON MALAS CONSEJERAS. #include <stdio.h> #include<stdlib.h> int main() { char *nombre; nombre = (char *)malloc (100*sizeof(char)); char *saludo = "buenos dias"; printf("por favor ingrese su nombre \n"); fgets (nombre , 100,stdin ); printf("%s %s",saludo ,nombre ); return 0; }
Espero ir más tranquilo para no pifiarla en esas tonterias. Gracias y un saludo!
|
|
|
1285
|
Programación / Programación C/C++ / Re: Duda de cadena de caracteres en C
|
en: 28 Septiembre 2012, 19:21 pm
|
Gracias por las observaciones rir, Como siempre que respondes, aprendo o tengo presente algo nuevo. Habrás observado que te hice caso en lo del uso de fgets frente a gets. Lo de "sizeof(char)" es para que Ixcal lo "vea mejor. Así en caso de tratarse de un int, float o double tenga presente su uso.
Un saludo PD: Reedite el post anterior para tener en cuenta lo de stdlib.
|
|
|
1286
|
Programación / Programación C/C++ / Re: Duda de cadena de caracteres en C
|
en: 28 Septiembre 2012, 18:06 pm
|
No es valido. Toda variable local inicia con un valor no definido o "basura", antes de utilizar ese puntero se debe almacenar en el una dirección valida ya sea mediante el operador "&" (no necesario en el caso de arrays) o el valor de retorno de malloc/calloc/realloc. Como ves, si no es con array llegamos a punteros. Más o menos, algo así: #include <stdio.h> #include<stdlib.h> int main() { char *nombre; nombre = (char *)malloc (80*sizeof(char)); char *saludo = "buenos dias"; printf("por favor ingrese su nombre \n"); fgets (nombre , 100,stdin ); printf("%s %s",saludo ,nombre ); return 0; }
Utilizo fgets porque se sobreentiende que al introducir nombre y apellido van a ir separados por un espacio en blanco, cosa que no consigues con el scanf tal como lo tienes. Lo considero más fácil que con variantes de scanf. Un saludoPD:Reditado
|
|
|
1287
|
Programación / Programación C/C++ / Re: Duda de cadena de caracteres en C
|
en: 28 Septiembre 2012, 00:01 am
|
Hola tengo una duda. Lo que hice fue crear un array de 80 elementos para guardar el nombre que se ingresara y hasta ahí todo bien. Hasta ahí todo bien. Así que mi duda es: ¿Se puede guardar una cadena de caracteres de otra forma en C? o si existe algún tipo de variable que sea tipo string o algo así. Que yo sepa en C no, a no ser con el uso de punteros y la asignación dinámica de memoria Otra cosa es en C++ con la clase string, pero es muy avanzado para el nivel en que están. Le entendiste mal o, lo más probable, se expresara mal. Saludos!.
|
|
|
1288
|
Programación / Programación C/C++ / Re: Forma para pausar un programa
|
en: 27 Septiembre 2012, 19:47 pm
|
Lo he copiado exactamente igual que aquí. Sigue sin pararse. Pues no lo entiendo. Lo he probado en Code::Blocks, en Dev-C++ y en Pelles C y en todos funciona. Ahora lo entiendo, estaba usando gets en lugar de scanf: #include <stdio.h> int main() { int i; char cadena [80]; for (i=0;cadena [i]!='\0';i++); printf ("\nEl texto tiene %d caracteres.\n",i ); printf ("\nPresione ENTER para salir:"); ; return 0; }
Para que no te pase lo del scanf, usalo de este modo ... se come el "\n": #include <stdio.h> int main() { int i; char cadena [80]; for (i=0;cadena [i]!='\0';i++); printf ("\nEl texto tiene %d caracteres.\n",i ); printf ("\nPresione ENTER para salir:"); ; return 0; }
Saludos
|
|
|
1290
|
Programación / Programación C/C++ / Re: Leer numero seguido de carácter
|
en: 27 Septiembre 2012, 18:30 pm
|
El usuario introduce un número seguido de letras (sin ninguna separación) pero la entrada estándar se come el último dígito del número. He puesto un ejemplo en el primer post. No se come nada:#include <iostream> using namespace std; int main() { int entero; cin >> entero; cout << "entero=" << entero<< endl; return 0; }
Saludos.
|
|
|
|
|
|
|