Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 26
  1. #1
    Utente di HTML.it L'avatar di Eris
    Registrato dal
    Feb 2004
    Messaggi
    511

    [C]Parse error -> mi da errore in nelle funzioni

    allora ho questo stupidissimo codice.dato che ancora non ho capito come funzionano le funzioni, i vettori ecc provavo a fare degli esperimenti.
    non capisco però perchè mi da errore.non so neanche cosa correggere.potreste aiutarmi
    'grazie!

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <ctype.h>
    char maiuscole (char testo);
    char minuscole (char testo1);
    int main()
    { char s[100];
    printf("inserisci una striga qls...\n");
    
      scanf("%s\n",s);
      char minuscole (char s);
       printf("Tutto in maiuscolo è cosi\n %s ", s);
      char maiuscole (char s);
       printf("Tutto in minuscolo è cosi\n %s ", s);
       
      
      system("PAUSE");	
      return 0;
    }
    
    char minuscole (char testo1)
    { 
    tolower (testo1);
      return (testo1);}
      
      
    char maiuscole (char testo)
    { toupper (testo);
      return (testo);}

  2. #2
    ok ... ho dato una lettura veloce al codice

    il problema è che tu fai un poco di confusione con gli array, per l'appunto

    gli array sono degli insieme di elementi, ovvero, in questo caso, s corrisponde ad un'insieme di caratteri

    ora, a parte che sbagli a passare il tipo alle funzioni, queste possono lavorare soltanto con un singolo carattere per volta non con l'intero array

    ---

    per rendere TUTTO maiuscolo il testo tu devi passare l'intero vettore e specificare nella funzione che ricevi in entrata l'intero vettore/array

    quindi

    char[] maiuscolo (char[] testo)

    in questo modo dichiari che in entrata ricevi un dato e che in uscita ne ricevi un'altro ... ovvero un vettore di caratteri in entrata ed un vettore di caratteri in uscita

    dopo di che devi ciclare l'intero vettore tramite un for e applicare la toupper (o tolower) a ogni singolo elemento

    ovvero, mettendo che i sia il counter del for
    testo[i] = toupper(testo[i]);

    e poi alla fine del for

    return testo;

    in questo modo la funzine ritorna il testo modificato che tu devi acquisire e stampare a video

    quindi
    char minuscole (char s);
    (che era errato in tutto e per tutto)

    diventa

    s = minuscole(s);

    in questo modo la varaibile
    s

    conterrà il testo in minuscolo

    stessa operazione per l'altra funzione e hai finito

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Originariamente inviato da daniele_dll
    char[] maiuscolo (char[] testo)

    in questo modo dichiari che in entrata ricevi un dato e che in uscita ne ricevi un'altro ... ovvero un vettore di caratteri in entrata ed un vettore di caratteri in uscita
    A parte che char[] maiuscolo (char[] testo) è una sintassi sbagliata, quindi:

    char* maiuscolo (char testo[])
    oppure, come preferisco io:
    char* maiuscolo (char *testo)

    Sul fatto di restituire un puntatore ... si può discutere fino a domani. In effetti, passando alla funzione un puntatore all'array non ci sarebbe alcun bisogno di "far ritornare" qualcosa.
    Se si fa ritornare il puntatore dell'inizio stringa, in genere, lo si fa solo per convenienza se si vuole usare la stringa come argomento di un'altra espressione. Esempio:

    printf ("%s\n", maiuscolo (s));

    Originariamente inviato da daniele_dll
    s = minuscole(s);

    in questo modo la varaibile
    s

    conterrà il testo in minuscolo
    Nota che non puoi usare s come "lvalue". Se s è dichiarato char s[100];, non puoi fare assegnazioni ad s!!!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  4. #4
    Originariamente inviato da andbin
    A parte che char[] maiuscolo (char[] testo) è una sintassi sbagliata, quindi:

    char* maiuscolo (char testo[])
    oppure, come preferisco io:
    char* maiuscolo (char *testo)

    Sul fatto di restituire un puntatore ... si può discutere fino a domani. In effetti, passando alla funzione un puntatore all'array non ci sarebbe alcun bisogno di "far ritornare" qualcosa.
    Se si fa ritornare il puntatore dell'inizio stringa, in genere, lo si fa solo per convenienza se si vuole usare la stringa come argomento di un'altra espressione. Esempio:

    printf ("%s\n", maiuscolo (s));

    Nota che non puoi usare s come "lvalue". Se s è dichiarato char s[100];, non puoi fare assegnazioni ad s!!!
    ma veramente volevo evitare apposta di tirare in ballo i puntatori dato che ha già confusione con i normali vettori

    inoltre sintatticamente è correttissima la possibilità di ritornare degli array di char ... che poi la cosa sia carina o meno è tutt'altro discorso

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    In pratica, condividendo quanto detto dagli altri, tranne per il fatto di non voler tirare in ballo i puntatori, prendi spunto da queste correzioni

    codice:
    #include "stdafx.h"
    #include <stdio.h>
    #include <stdlib.h>
    #include <ctype.h>
    
    void minuscole (char *testo)
    { 
      char *t=testo;
      while(*t)
      {
        *t=tolower(*t);
        t++;
      }
    }
      
    void maiuscole (char *testo)
    { 
      char *t=testo;
      while(*t)
      {
        *t=toupper(*t);
        t++;
      }
    }
    
    int main()
    {
      char s[100];
      printf("inserisci una stringa qls...\n");
    
      fgets(s, 100, stdin);
    
      minuscole(s);
      printf("Tutto in minuscolo e' cosi\n %s ", s);
    
      maiuscole(s);
      printf("Tutto in maiuscolo e' cosi\n %s ", s);
    
      system("PAUSE");	
      return 0;
    }
    I puntatori sono un elemento fondamentale in C/C++ e che va affrontato praticamente all'inizio dello studio. In realta', dato che e' un argomento fortemente legato alle stringhe, e' utilissimo apprenderlo proprio in relazione ad esempi legati alle stringhe.

    Ovviamente, IMHO

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Originariamente inviato da daniele_dll
    ma veramente volevo evitare apposta di tirare in ballo i puntatori dato che ha già confusione con i normali vettori
    Mah ... guarda, in un buon corso di studio del linguaggio "C" i vettori e i puntatori si studiano assieme ...

    Nota che dichiarando nel parametro della funzione char testo[] oppure char *testo, testo è sempre .... (ma guarda caso ) un puntatore!

    Originariamente inviato da daniele_dll
    inoltre sintatticamente è correttissima la possibilità di ritornare degli array di char ... che poi la cosa sia carina o meno è tutt'altro discorso
    Nel linguaggio "C" NON si possono far ritornare array!!!! Al massimo puntatori (quindi nel caso di array, un puntatore al primo elemento dell'array).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  7. #7
    Utente di HTML.it L'avatar di Eris
    Registrato dal
    Feb 2004
    Messaggi
    511
    umh diciamo che array, funzioni e puntatori proprio non riesco a capirli...

    ho letto 200 guide ma niente...

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da Eris
    umh diciamo che array, funzioni e puntatori proprio non riesco a capirli...
    Hai detto niente ... il 90% del linguaggio ...

    Originariamente inviato da Eris
    ho letto 200 guide ma niente...
    Beh ... allora la vedo dura ...

    Insisti ...

  9. #9
    Utente di HTML.it L'avatar di Eris
    Registrato dal
    Feb 2004
    Messaggi
    511
    dici?

    cosa mi conviene studiare per bene prima?le funzioni?

  10. #10
    Utente di HTML.it L'avatar di Eris
    Registrato dal
    Feb 2004
    Messaggi
    511
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #define MAX 50
    
    int main()
    { char lett[MAX]= {'a','b','c','d'};
      int  n=0;
      printf("Scrivi un numero:\n");
      scanf("%d",&n);
      printf("Hai scritto il num %d che corrisponde alla lett %s\n", n, lett[n+1]);
      
      system("PAUSE");	
      return 0;
    }
    per esercitarmi ho provato questo ma non funziona.cosa sbaglio?

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