Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [C] Passaggio di una stringa a una funzione

    Salve a tutti ragazzi sono un nuovo iscritto di questo bel sito (che più volte mi ha salvato la vita)
    Passando al mio quesito, come da titolo non riesco a passare una stringa ad una funzione, lo so che ci sono già state molte discussioni riguardo a questo problema ma proprio non capisco. Ho provato a fare un programmino per l'università, in pratica il gioco dell'impiccato ma quando provo a passare una stringa ad una funzione mi passa solo il primo carattere e non so perchè.

    questo è il mio codice:
    #include <stdio.h>
    #include <string.h>
    #define dim 300
    #define dim1 15
    int anagramma (char* s2,int* frequenza) {
    int i,uguali=1,frequenza2[dim]={0};

    //guardo il numero e il tipo di lettera nella stringa s2

    for (i=0;s2[i]!='\0';i++) {
    frequenza2[s2[i]]++;

    //confronto le due stringhe


    for (i=0;i<dim;i++) {
    if (frequenza[i]!=frequenza2[i]) {
    uguali=0;
    }
    }
    if (uguali==1) {
    return 1;
    }
    else
    return 0;

    }
    }

    int main (void) {
    char s1[dim1],c,s2[dim1]={0};
    int i,frequenza[dim]={0},j=0,frequenza2[dim]={0},k,lunghezza;
    printf ("utente 1 digiti una parola composta da un massimo di 15 caratteri");
    scanf ("%s",s1);
    lunghezza=strlen(s1);
    for (i=0;i<lunghezza;i++) {
    frequenza[s1[i]]++;
    }
    i=0;
    while (i<5) {

    //tentativo utente 2

    printf ("digita una lettera ");
    scanf (" %c",&c);

    //se la lettera appartiene alla stringa s1 inserisce il carattere in una stringa,richiama la funzione e controlla se tutte le lettere appartengono alla stringa s1

    if (frequenza[c]!=0) {
    s2[j]=c;
    j++;
    }
    //altrimenti incrementa il contatore degli errori.

    else if (frequenza[c]==0) {
    printf ("hai commesso un errore,riprova (hai un massimo di 5 possibilità).\n");
    i++;
    }

    //se il programma ha lo stesso numero di lettere e le stesse lettere

    if (anagramma(s2,frequenza)==1)
    break;
    //esce dal ciclo
    }
    printf ("\n\n\n\n");
    if (i>=5) {
    printf ("hai perso ");
    }
    else
    printf ("COMPLIMENTI HAI VINTO!!");
    }



    Vi ringrazio molto in anticipo, spero di aver reso abbastanza comprensibile il programma.

  2. #2
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    550

    ciao

    spero di aver reso abbastanza comprensibile il programma.
    Direi, visto che non hai usato i tag code per inserirvi il codice, il tutto è abbastanza INCOMPRENSIBILE

    Non trovo errori nel passare una stringa a una funzione, hai provato a stampare la stringa all'interno della funzione???
    Ultima modifica di torn24; 08-01-2018 a 08:59
    Tecnologia

  3. #3
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    550

    Ciao

    Ciao, visto che non mi sembrava ci fossero errori ho fatto il debug al posto tuo.
    Aggiungendo qualche printf(), si vede che la stringa viene passata correttamente ma le frequenze non coincidono.

    IL PROBLEMA è il calcolo delle frequenze, è da rivedere

    codice:
    int anagramma (char* s2,int* frequenza) {
    int i,uguali=1,frequenza2[dim]={0};
    
    //guardo il numero e il tipo di lettera nella stringa s2
    
    for (i=0;s2[i]!='\0';i++) {
    frequenza2[s2[i]]++;  // MANCA LA PARENTESI DI CHIUSURA
    Ultima modifica di torn24; 09-01-2018 a 09:21
    Tecnologia

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