PDA

Visualizza la versione completa : [c] funzione strlowr


Eduadie
25-02-2013, 13:35
Ho un problema in c con la seguente funzione che trasforma i caratteri maiuscoli in caratteri minuscoli. L'ho utilizzato funzione delete del seguente codice:



/*Funzione per eliminare un prodotto dato il nome*/
void EliminaProdotto (int mycar[50])
{
int risultato;
char deleteprodotto[50];

if(ContaProdotti(mycar) > 0)
{
printf("Inserisci il nome del prodotto che vuoi eliminare dal carrello = ");
scanf("%s", deleteprodotto);
risultato = Delete(mycar, deleteprodotto);
if(risultato != 0)
{
printf("Prodotto eliminato correttamente\n");
} else {
printf("Non esiste alcun prodotto con questo nome\n");
}
}
}

int Delete (int mycar[50], char deleteprodotto[50])
{
int i,j,successo=0;
listaprodotti();

for(i=0;i<50 && successo==0;i++)
{
if((j = mycar[i]) == -1)
{
successo = 0;
} else if(strcmp(strlwr(deleteprodotto),strlwr(elemento[j].nome)) == 0)
{
mycar[i] = -1;
successo = 1;
return 1;
}
}
return 0;
}

Se la parola non ha spazi il tutto funziona tranquillamente, altrimenti mi dice che non ha trovato alcun prodotto con questo nome...come posso risolvere?

oregon
25-02-2013, 13:46
Il valore di j non definito

oregon
25-02-2013, 13:48
EDIT: ho visto che j assume un valore dal vettore ...

Purtroppo il codice non completamente compilabile e non pu essere provato ...

Comunque, mi domando a cosa ti serva la variabile

successo

dato che non la usi

Eduadie
25-02-2013, 14:02
Vabb si, a parte la cosa giusta che mi hai detto della variabile successo che non utilizzata poich poi c' il return, ma la cosa che mi chiedo che cambia qualcosa nella funzione strlowr in caso ci siano degli spazi nella parola? Oppure nel strcmp...

oregon
25-02-2013, 14:04
No, non cambia nulla, ma bisogna capire, quando capita il problema, se alla strlwr stai effettivamente passando quello che pensi ...

Prova a fare un po' di debugging bloccando l'esecuzione quando c' la strcmp per dare un'occhiata ai valori delle stringhe passate.

Eduadie
25-02-2013, 15:45
Ho fatto il debug, in pratica se io scrivo "succo di frutta" lui mi passa solo succo. Quindi l'errore gi prima del strcmp poich non mi passa tutta la stringa succo di frutta ma solo succo...come devo risolvere?

MItaly
25-02-2013, 15:50
La scanf con specificatore "%s" legge una singola parola; usa la fgets per leggere tutta la riga (ricordandoti di eliminare il newline finale).

Eduadie
25-02-2013, 15:57
Non riesco ad utilizzare la funzione fgets, non che potresti fornirmi un esempio?

MItaly
25-02-2013, 16:02
Hai letto la sua documentazione? Cosa non ti chiaro? :fagiano:

Eduadie
25-02-2013, 16:42
Mi chiede tre valori tra cui uno un file...cosa devo inserire?

Loading