Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 15 su 15
  1. #11
    azz!
    Ecco cosa si combina ad usare sempre std::string del C++ :tongue:
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

  2. #12
    ci ho lavorato su:

    codice:
    #include <stdio.h>
    #include <string.h>
    #include <assert.h> 
    #include <malloc.h> 
    
    #define DELETE(obj) free(obj);
    
    struct List
    {
      int el;
      struct List *next;
    };
    
    void init(struct List *aux, int el);
    void add(struct List *aux, int el);
    
    void init(struct List *aux, int el)
    {
      assert(aux != NULL);
      aux->el = el;
      aux->next = NULL;
    }
    
    void add(struct List *aux, int el)
    {
      assert(aux != NULL);
      while(aux->next != NULL)
       aux = aux->next;
    
      struct List *tmp = (struct List *)malloc(sizeof(struct List));
    
      tmp->el = el;
      tmp->next = NULL;
    
      aux->next = tmp;
    }
    
    void delete(struct List *aux)
    {
    	while(aux != NULL)
    	{
    		DELETE(aux->next)
    	}
    	DELETE(aux)
    }
    
    int main(int argc, char *argv[])
    {
    	struct List *head = (struct List *)malloc (sizeof(struct List));
    	init(head, 0);
    	short i, count = 0;
    	for(i = 0; i <= 20; ++i)
    	{
    		add(head, i);
    	}
    	while(head != NULL)
    	{
    		printf("%d", head->el);
    		head = head->next;
    		if((count % 2) == 0) 
      		  puts("");
                    else
        	          puts("\n");
                    ++count; 
    	}
    	delete(head);
    	puts("Press any key to exit...");
    	DELETE(head) 
    	char c;
    	scanf("%s", &c);
            return 0;
    }
    Stampa a coppie cosi:

    nn
    nn

    nn
    nn



    Basta modificarla un po e andra anche con i char

    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

  3. #13
    ho provato ha inizializzare la lista nel modo postato da "anx721"

    tutto ok

    poi nel main ho questo ciclo while :

    codice:
    while(fgets(s,254,FileIn))
      
                  {                
                       if (strstr (s, par) != NULL)
                       {
                       struct List *head = (struct List *)malloc (sizeof(struct List));
                       init(head, s); // è giusto ?
                       add(head, s); // è giusto ?
                       while(head != NULL)
                             	{
                                 		printf("%s\n", head->el);
                           			head = head->next;
                   				}
    		           
    
                       y++;
                       }
                       else 
                       
                       x++;
                   }

    Praticamente il mio ciclo while continua a sparare fuori S ovvero strighe diverse oppure uguali tra di loro e io vorrei metterle nella lista ...

    ma mi si blocca al primo riultato e poi si impalla e non va più avanti ...


    Se sapete aiutarmi vi ringrazio molto

    CIAO e GRAZIE

  4. #14
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Nel punto in cui hai scritto:

    struct List *head = (struct List *)malloc (sizeof(struct List));
    init(head, s); // è giusto ?
    add(head, s); // è giusto ?

    non è giusto, perchè le istruzioni

    struct List *head = (struct List *)malloc (sizeof(struct List));
    init(head, s);

    vanno eseguite solo una volta, la prima volta che crei un elemento della lista, mentre le volte successive devi usare add(head, s); quindi aggiusta il codice mettendo la dichiarazione

    struct List *head = NULL;

    fuori dal while e sostituendo quelle tre righe che ho scritto sopra con:

    codice:
    //primo elemento inserito nella lsita
    if(head == NULL){
         head = (struct List *)malloc (sizeof(struct List));
         init(head, s);
    }
    else
         add(head, s);

    Un altro errore sta nel ciclo while che effettua la stampa, perchè in quel ciclo modifichi la variabile head, che quindi dopo il ciclo non punta piu alla testa della lista, ma sarà NULL; in quel ciclo devi invece utilizzare un puntatore struct List *temp temporaneo che scorra la lista:

    codice:
    temp = head;
    while(temp != NULL)
    {
    	printf("%s\n", temp ->el);
            temp = temp ->next;
    }

    Infine tieni presente che nell'esempio che ti ho dato io il campo el viene allocato come un puntatore a 100 caratteri, se devi leggere piu caratteri (254 indica il numero di caratteri che leggi ogni volta?) devi sostituire 100 con il numero di caratteri massimo che vuoi mettere in una stringa + 1 (ad esempio 255, se vuoi stringhe di 254 caratteri).


    Il codice cosi modificato diventa:

    codice:
    struct List *head = NULL;
    struct List *temp = NULL;
    
    while(fgets(s,254,FileIn))
    {                
            if (strstr (s, par) != NULL)
            {
                  if(head == NULL){
                          head = (struct List *)malloc (sizeof(struct List));
                          init(head, s);
                  }
                  else
                           add(head, s);
    
                  temp = head;
                  while(temp != NULL)
                  {
                          printf("%s\n", temp ->el);
                          temp = temp ->next;
                  }
                  y++;
            }
            else           
                   x++;
    }


  5. #15
    Ringraziamenti sinceri

    Very good

    CIAO E GRAZIE

    ps

    Non è ancora perfetto ma grazie ancora delle dritte


    CIAO

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.