elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


  Mostrar Mensajes
Páginas: 1 ... 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 [129] 130 131 132
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:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. struct lista_elementos
  6. {
  7. char elem[40];
  8. struct lista_elementos *sig;
  9. struct lista_elementos *ant;
  10. };
  11.  
  12. typedef struct lista_elementos nodo;
  13.  
  14. void crear(nodo *registro,nodo *fin,nodo *anterior);
  15. void mostrar_abajo(nodo *pt);
  16. void mostrar_arriba(nodo *pt);
  17.  
  18. int main()
  19. {
  20.    nodo *prin,*fin;
  21.    prin=(nodo*)malloc(sizeof(nodo));
  22.    fin=(nodo*)malloc(sizeof(nodo));
  23.    crear(prin,fin,NULL);
  24.    puts("\n");
  25.    mostrar_abajo(prin);
  26.    puts("\n");
  27.    mostrar_arriba(fin);
  28. }
  29.  
  30. void crear(nodo *registro,nodo *fin,nodo *anterior)
  31. {
  32.    printf("Dato (Escribir LEOSANSAN para terminar): ");
  33.    scanf(" %s",registro->elem);
  34.  
  35.    if (strcmp(registro->elem,"LEOSANSAN")==0)
  36.            {
  37.            registro->sig=NULL;
  38.            registro->ant=anterior;
  39.            fin=registro;
  40.        }
  41.    else
  42.        {
  43.            registro->sig=(nodo*)malloc(sizeof(nodo));
  44.            registro->ant=anterior;
  45.            crear(registro->sig,fin,registro);
  46.        }
  47. }
  48.  
  49. void mostrar_abajo(nodo *pt)
  50. {
  51.    if (pt->sig!=NULL)
  52.        {
  53.            printf("%s  ",pt->elem);
  54.            mostrar_abajo(pt->sig);
  55.        }
  56. }
  57. void mostrar_arriba(nodo *pt)
  58. {
  59.   if (pt->ant==NULL)
  60.    printf("%s",pt->elem);
  61.    else
  62.        {
  63.            printf("%s  ",pt->elem);
  64.            mostrar_arriba(pt->ant);
  65.        }
  66. }
  67.  
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:
Código
  1. scanf("%[^\n]", 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:
Código
  1. #include <stdio.h>
  2. int main(){
  3. char linea [80];
  4. char ch1, ch2;
  5. scanf("%[^\n]%*c", linea);
  6. printf("Ingrese 1: ");
  7. scanf("%c%*c",&ch1);
  8. printf("Ingrese 2: ");
  9.        scanf("%c%*c",&ch2);
  10. printf("%c  %c   %s\n", ch1, ch2,linea);
  11. return 0;
  12. }
Te dejo esta referencia http://beej.us/guide/bgc/output/html/multipage/scanf.html
Saludos
1283  Programación / Programación C/C++ / Re: Duda de cadena de caracteres en C en: 28 Septiembre 2012, 23:05 pm
he estado leyendo por el foro que la función fflush no es conveniente usarla en los programas, entonces ¿Está mal que la use en mi código?.
En este caso está de más. Prueba a quitarla. Otra cosa sería si usaras scanf.
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.
Código
  1. #include <stdio.h>
  2. #include<stdlib.h>
  3. int main()
  4. {
  5. char *nombre;
  6. nombre = (char *)malloc (100*sizeof(char));
  7. char *saludo = "buenos dias";
  8. printf("por favor ingrese su nombre \n");
  9.    fgets (nombre, 100,stdin);
  10. printf("%s %s",saludo,nombre);
  11. return 0;
  12. }
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
Citar
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í:
Código
  1. #include <stdio.h>
  2. #include<stdlib.h>
  3. int main()
  4. {
  5. char *nombre;
  6. nombre = (char *)malloc (80*sizeof(char));
  7. char *saludo = "buenos dias";
  8. printf("por favor ingrese su nombre \n");
  9. fgets (nombre, 100,stdin);
  10. printf("%s %s",saludo,nombre);
  11. return 0;
  12. }
  13.  
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.
Citar
Hasta ahí todo bien.
Citar
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.

Citar
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:
Código
  1. #include <stdio.h>
  2.  
  3. int main() {
  4.  
  5.    int i;
  6.    char cadena [80];
  7.  
  8.    gets( cadena);
  9.  
  10.    for (i=0;cadena [i]!='\0';i++);
  11.  
  12.    printf ("\nEl texto tiene %d caracteres.\n",i);
  13.    printf ("\nPresione ENTER para salir:");
  14.    while (getchar()!='\n')
  15.        ;
  16.    return 0;
  17. }
Para que no te pase lo del scanf, usalo de este modo ... se come el "\n":
Código
  1. #include <stdio.h>
  2.  
  3. int main() {
  4.  
  5.    int i;
  6.    char cadena [80];
  7.    scanf("%s%*c", cadena);
  8.    for (i=0;cadena [i]!='\0';i++);
  9.    printf ("\nEl texto tiene %d caracteres.\n",i);
  10.    printf ("\nPresione ENTER para salir:");
  11.    while (getchar()!='\n')
  12.        ;
  13.    return 0;
  14. }
  15.  
Saludos
1289  Programación / Programación C/C++ / Re: Forma para pausar un programa en: 27 Septiembre 2012, 19:22 pm
Lo he compilado y el programa no se pausa, se cierra.
Citar
Creo que no te has fijado bien en el punto y coma ";" después del while. Este es el que "obliga" al programa a esperar el ENTER para cerrar.
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:
Código
  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5.    int entero;
  6.    cin >> entero;
  7.    cout << "entero=" << entero<< endl;
  8.    return 0;
  9. }
Saludos.
Páginas: 1 ... 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 [129] 130 131 132
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines