PDA

Visualizza la versione completa : [C] Passaggio di una stringa a una funzione


Davide19998
07-01-2018, 18:10
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.

torn24
08-01-2018, 09:35
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 :D

Non trovo errori nel passare una stringa a una funzione, hai provato a stampare la stringa all'interno della funzione???

torn24
09-01-2018, 09:59
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




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

Loading