Postato originariamente da bose:
..ciao ragazzi..dovrei fare una funzione che date due stringhe mi ritorni 0 se sono di caratteri nella stessa posizione e uguali, 1 se la stringa1 è piu grande e 2 se la stringa2 è piu grande.. sotto trovate la funzione come ho fatto io solo che non va..mi da a video sempre 2..
#include <STDIO.H>
#include <CONIO.H>
#define vero 1
#define falso 0
void main(void)
{
// interno del programma che non scrivo perchè non serve = )
}
int cerca_max (char *str1, char *str2)
{
int kk, ris,bool;
bool=0;
ris=0;
do
{
if (str1[kk]!= str2[kk])
{
if(str1[kk] > str2[kk])
{
ris=1;
bool=1;
}
if(str1[kk] < str2[kk])
{
ris=2;
bool=1;
}
}
kk++;
} while ((str1[kk] == str2[kk]) && (bool==0));
return (ris);
}
Premessa: intanto usiamo il tag CODE altrimenti non si capisce niente del codice...
Hint 0):
la variabile kk non ha un valore iniziale, quindi potrebbe contenere un numero casuale facendo crashare il programma quando tenti di usarla come indice per un array...
inizializzala nel momento stesso in cui la dichiari:
int kk = 0;
Hint 1): non sai quanto sono lunghe le stringhe, quindi potresti tranquillamente andare a leggere memoria non inizializzata... una stringa termina quando incontri il carattere nullo, valore ascii 0.
Quando incontri questo carattere puoi dichiarare terminato il ciclo (quindi modifica il ciclo di conseguenza...).
Hint 2): Anzichè usare il do..while usa un più generico while. Non puoi sapere a priori se esiste almeno un carattere in entrambe le stringhe, quindi potresti far crashare il programma nel caso in cui una delle stringhe sia nulla.
Hint 3): Lo standard ISO vuole che la funzione main abbia la seguente firma:
int main(int argc, char **argv)
Se non rispetti questo standard, dichiarando la funzione come void, il sistema riceverà in output un valore numerico casuale (anche se di solito è 0 su windows), quindi non sarà in grado di determinare la corretta esecuzione del programma (con possibile falsa segnalazione di terminazione inaspettata). Dichiara come int, e quando il programma termina correttamente, metti un bel return 0; alla fine, oppure return 1 in caso di errori gravi e irreversibili (ad esempio quando finisce la memoria e fallisce una malloc).
Hint 4): la parola bool in C++ (e anche in C99) è il nome di un tipo predefinito. Usa un nome di variabile diverso da "bool", in modo da aumentare la compatibilità del tuo codice con tutti i compilatori C e C++ esistenti.
non ho altri suggerimenti da darti per il momento...
Ciao!