Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 24
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    56

    C Passaggio argomento a una funzione

    Ho dei problemi a capire le segnalazioni di errore ...
    e procedo per tentativi !
    Come posso passare una costante a una funzione ?
    cosi non da errore di compilazione ma non arriva a Mqsort ...
    Mqsort(lineptr, 0, nstr );


    Mqsort(lineptr, 0, &nstr );

    ./recqsort1.c: In function ‘main’:
    ../recqsort1.c:39: warning: passing argument 3 of ‘Mqsort’ makes integer from pointer without a cast


    Mqsort(lineptr, 0, &(int)nstr );

    ../recqsort1.c: In function ‘main’:
    ../recqsort1.c:39: error: lvalue required as unary ‘&’ operand


    Grazie....

  2. #2
    Com'è dichiarata Mqsort? Cosa sono lineptr e nstr?
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    56
    Originariamente inviato da MItaly
    Com'è dichiarata Mqsort? Cosa sono lineptr e nstr?
    -Main chiama readlines per leggere delle stringhe che mette in *lineptr[]
    -chiama poi Mqsort per ordinarle. Mentre lineptr passa a Mqsort ...ho dei problemi
    per passare il numero delle stringhe da ordinare...
    Invece di usare le funzioni di libreria a scopo didattico uso tutte le funzioni scritte
    internamente ( copiate dal libro per meglio dire ...)
    Incollo il codice , grazie.

    [CODE]


    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #define MAXLINES 1000
    #define ALLOCSIZE 10000
    #define MAXLEN 1000


    char *lineptr[MAXLINES]; /* puntatore alle linee di testo */
    int readlines(char *lineptr[], int nlines);
    void writelines(char *lineptr[], int nlines);
    void Mqsort (char *lineptr[], int left, int right);
    int Mgetline(char s[], int lim );
    void Mswap (char *v[], int i, int j);

    //int Mgetline(char *, int);



    /* ordina le linee di input */

    int main()
    {


    int nlines ;


    if ((nlines = readlines(lineptr, MAXLINES)) >= 0 )

    {
    // Mqsort(lineptr, 0, nlines -1);



    Mqsort(lineptr, 0, nstr );
    writelines(lineptr, nlines);
    return 0 ;
    }

    else
    {
    printf("errore: troppe linee di input da ordinare\n");
    return 1 ;
    }

    }


    /* readlines legge le linee di inpuy */





    int readlines(char *lineptr[], int maxlines )

    {

    int len;
    int nlines = 0;
    char *p;
    int nstr ;
    char line[MAXLEN];




    while ((len = Mgetline(line,MAXLEN)) > 0 )


    if (nlines >= maxlines || (p = malloc(len)) == NULL)

    return -1 ;
    else

    {



    line[len-1] = '\0';
    strcpy(p, line);
    lineptr[nlines++] = p;
    nstr = nlines ;
    }

    }



    /* getline: carica una linea in s, ritorna la lunghezza */


    int Mgetline(char s[], int lim )

    {
    int c, i;
    i= 0;

    while (--lim > 0 && (c = getchar()) != EOF && c != '\n')
    s[i++] = c ;
    if (c == '\n')
    s[i++] = c;
    s[i] = '\0';
    return i;
    }








    /* qsort : ordina v[left] ... v[right] in ordine crescente */


    void Mqsort( char *v[], int left, int right )

    {
    int i, last;
    int nlines;
    void Mswap(char *v[], int i, int j);

    if (left >= right) // se il vettore contiene meno di due
    return; // elementi non fa nulla


    /* sposta l' elemento discriminante in v[left] */


    Mswap(v, left, (left + right) / 2 );
    last = left;

    for (i= left+1; i <= right; i++)

    if (strcmp (v[i] , v[left]) < 0 )

    Mswap(v, ++last, i);

    /* ripristina l' elemento discriminante */

    Mswap(v, left, last);
    Mqsort(v, left, last - 1);
    Mqsort(v, last + 1, right);

    }


    /* swap : scambia v[i] con v[j] */

    void Mswap (char *v[], int i, int j)


    {
    char *temp;

    temp = v[i];
    v[i] = v[j];
    v[j] = temp;

    }



    /* writelones scrive in output le linee */


    void writelines(char *lineptr[], int nlines)

    {

    int i;

    for (i = 0; i < nlines; i++ )
    printf("%s\n", lineptr[i]);


    }








    [\CODE]

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,299
    Sistema il codice che così non si capisce nulla ...

    E poi, in

    Mqsort(lineptr, 0, nstr );

    nstr

    da dove viene?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    L' argomento 3 della Mqsort è un intero e non un puntatore a intero.

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    56
    Originariamente inviato da oregon
    Sistema il codice che così non si capisce nulla ...

    E poi, in

    Mqsort(lineptr, 0, nstr );

    nstr

    da dove viene?

    Scusa ho già riallineato il codice per TRE volte e mi si risposta tutto a sinistra quando lo salvo !!!
    SONO KO ! (quando lo riedito è a posto quando lo risalvo va fuori posto !


    nstr = nlines ; <<<<< è nella funzione >>>>

    int readlines(char *lineptr[], int maxlines )




    [CODE]




    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #define MAXLINES 1000
    #define ALLOCSIZE 10000
    #define MAXLEN 1000



    char *lineptr[MAXLINES]; /* puntatore alle linee di testo */
    int readlines(char lineptr[], int nlines);
    void writelines(char *lineptr[], int nlines);
    void Mqsort (char *lineptr[], int left, int right);
    int Mgetline(char s[], int lim );
    void Mswap (char *v[], int i, int j);



    int main()


    {


    int nlines ;
    if ((nlines = readlines(lineptr, MAXLINES)) >= 0 )

    {

    Mqsort(lineptr, 0, nstr );
    writelines(lineptr, nlines);
    return 0 ;
    }

    else
    {
    printf("errore: troppe linee di input da ordinare\n");
    return 1 ;
    }

    }


    int readlines(char *lineptr[], int maxlines )
    {

    int len;
    int nlines = 0;
    char *p;
    int nstr ;
    char line[MAXLEN];

    while ((len = Mgetline(line,MAXLEN)) > 0 )
    if (nlines >= maxlines || (p = malloc(len)) == NULL)
    return -1 ;

    else

    {

    line[len-1] = '\0';
    strcpy(p, line);
    lineptr[nlines++] = p;
    nstr = nlines ;
    }

    }



    /* getline: carica una linea in s, ritorna la lunghezza */

    int Mgetline(char s[], int lim )


    {
    int c, i;
    i= 0;

    while (--lim > 0 && (c = getchar()) != EOF && c != '\n')

    s[i++] = c ;

    if (c == '\n')
    s[i++] = c;
    s[i] = '\0';
    return i;
    }



    /* qsort : ordina v[left] ... v[right] in ordine crescente */



    void Mqsort( char *v[], int left, int right )

    {
    int i, last;
    int nlines;

    if (left >= right)
    return;

    Mswap(v, left, (left + right) / 2 );
    last = left;

    for (i= left+1; i <= right; i++)

    if (strcmp (v[i] , v[left]) < 0 )

    Mswap(v, ++last, i);

    Mswap(v, left, last);
    Mqsort(v, left, last - 1);
    Mqsort(v, last + 1, right);

    }


    /* swap : scambia v[i] con v[j] */

    void Mswap (char *v[], int i, int j)


    {
    char *temp;

    temp = v[i];
    v[i] = v[j];
    v[j] = temp;

    }



    /* writelones scrive in output le linee */


    void writelines(char *lineptr[], int nlines)

    {

    int i;

    for (i = 0; i < nlines; i++ )
    printf("%s\n", lineptr[i]);


    }

    [\CODE]

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,299
    Originariamente inviato da roldo
    nstr = nlines ; <<<<< è nella funzione >>>>
    Ma tu usi nstr nel main!

    P.S. Ma è così difficile sistemare il codice in modo che si legga? Non vedi che non si capisce nulla? La barra del tag [\CODE] deve essere al contrario /
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    56
    Originariamente inviato da oregon
    Sistema il codice che così non si capisce nulla ...

    E poi, in

    Mqsort(lineptr, 0, nstr );

    nstr

    da dove viene?



    codice:
    
                                     #include <stdio.h>
                                    #include <string.h>
                                     #include <stdlib.h>
                                     #define MAXLINES 1000
                                      #define ALLOCSIZE 10000
                                        #define MAXLEN 1000
    
    
    
                               char *lineptr[MAXLINES]; /* puntatore alle linee di testo */
                               int readlines(char lineptr[], int nlines);
                               void writelines(char *lineptr[], int nlines);
                               void Mqsort (char *lineptr[], int left, int right);
                                int Mgetline(char s[], int lim );
                                void Mswap (char *v[], int i, int j);
    
     
    
        int main() 
     
                          
    {
    
    
                         int nlines ;
                       if ((nlines = readlines(lineptr, MAXLINES)) >= 0 )
    
    {
     
                     Mqsort(lineptr, 0, nstr );
                     writelines(lineptr, nlines);
                     return 0 ;
    }
    
                else
    {
               printf("errore: troppe linee di input da ordinare\n");
              return 1 ;
    }
    
    }
    
    
             int readlines(char *lineptr[], int maxlines ) 
    {
    
           int len;
           int nlines = 0;
           char *p;
           int nstr ;
           char line[MAXLEN];
    
            while ((len = Mgetline(line,MAXLEN)) > 0 )
           if (nlines >= maxlines || (p = malloc(len)) == NULL)
           return -1 ;
    
           else
    
    {
    
               line[len-1] = '\0';
               strcpy(p, line);
               lineptr[nlines++] = p;
               nstr = nlines ;
    }
    
    }
    
    
    
            /* getline: carica una linea in s, ritorna la lunghezza */
    
     int Mgetline(char s[], int lim )   
    
                  
    {
                int c, i;
                i= 0;
    
                while (--lim > 0 && (c = getchar()) != EOF && c != '\n')
    
               s[i++] = c ;
    
              if (c == '\n')
                 s[i++] = c;
                s[i] = '\0';
                 return i;
    }
    
    
    
    /* qsort : ordina v[left] ... v[right] in ordine crescente */
    
     
    
      void Mqsort( char *v[], int left, int right )   
    
    {
                  int i, last;
                  int nlines;
                
                  if (left >= right)  
                     return;   
    
                  Mswap(v, left, (left + right) / 2 );
                   last = left;
    
                   for (i= left+1; i <= right; i++)
    
                   if (strcmp (v[i] , v[left]) < 0 )
    
                  Mswap(v, ++last, i);
     
                  Mswap(v, left, last);
                  Mqsort(v, left, last - 1);
                  Mqsort(v, last + 1, right);
    
    }
    
    
            /* swap : scambia v[i] con v[j] */
    
        void Mswap (char *v[], int i, int j) 
    
    
    {
                       char *temp;
    
                       temp = v[i];
                        v[i] = v[j];
                        v[j] = temp;
    
    }
    
    
    
                /* writelones scrive in output le linee */
    
    
        void writelines(char *lineptr[], int nlines)   
    
    {
    
                   int i;
    
                     for (i = 0; i < nlines; i++ )
                     printf("%s\n", lineptr[i]);
    
    
    }

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,299
    Quindi ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    56
    Originariamente inviato da oregon
    Ma tu usi nstr nel main!

    P.S. Ma è così difficile sistemare il codice in modo che si legga? Non vedi che non si capisce nulla? La barra del tag [\CODE] deve essere al contrario /

    E' anche nella readlines ...fra i vari tentativi è anche li' !
    Adesso il codice sembra più leggibile ... ho corretto il [/CODE]

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 © 2020 vBulletin Solutions, Inc. All rights reserved.