Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
..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));
..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..
Codice sorgente - presumibilmente C++
#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:
Codice sorgente - presumibilmente C/C++
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:
Codice sorgente - presumibilmente C/C++
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!
..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..
Codice sorgente - presumibilmente C++
#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:
Codice sorgente - presumibilmente C/C++
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:
Codice sorgente - presumibilmente C/C++
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!
ok grazie =) ..
..un paio di cose..
kk la immetto io con
Codice sorgente - presumibilmente Plain Text
printf("\nINSERISCI MAX 10 CARTTERI")
..e cosi anche la seconda stringa.. leggendola con
Codice sorgente - presumibilmente Plain Text
scanf("%s", s1)
e idem per la seconda stringa s2.. la lunghezza non l ho messa perchè non penso che serva.. perchè se incontra già la prima parola diversa esce.. e poi.. azzerando le stringhe.. le 2 stringhe sono da 10
Codice sorgente - presumibilmente C/C++
char s1[10]
... mi scuso..mi rendo conto che queste cose dovevo dirle prima.. sorry..
facendo il while.. quale sarebbe la condizione per uscire?
Codice sorgente - presumibilmente C/C++
while (s1[kk]!=s2[kk])
?
Ultima modifica effettuata da bose il 04/02/2010 alle 18:06
e se le due stringhe fossero uguali? :P
Vai avanti all'infinito^^
la lunghezza non è necessaria a patto di far finire while (oltre che quando sono diverse) anche quando incontri '\0'.
ps.@kane ma in c le variabili locali non vengono automaticamente inizializzate a 0?
Mi pare sia cosi
e se le due stringhe fossero uguali? :P
Vai avanti all'infinito^^
la lunghezza non è necessaria a patto di far finire while (oltre che quando sono diverse) anche quando incontri '\0'.
ps.@kane ma in c le variabili locali non vengono automaticamente inizializzate a 0?
Mi pare sia cosi
se sono uguale arrivato al decimo carattere esco... a parte che a me basta guardare il primo carattere per definire se è piu grande, piu piccolo o uguale.. esempio..
s1= abcdefghil
s2= bacdefghil
in questo caso devo mettere ris=2 perchè b della seconda stringa è piu grande di a..quindi metto 2 e esco.. oopss.. pero un secondo mi è venuto in mente una cosa.. non mi basta fare cosi:
ciclo do-while
ris=0;
Codice sorgente - presumibilmente C/C++
if (s1[kk]!=s2[kk])
{
if (s1[kk] < s1[kk])
{
ris=1;
else
ris=2;
}
}while ((s1[kk]==s2[kk]) && (ris==0));
fatto cosi cambi aqualcosa?
aiutatemi please... !!
Ultima modifica effettuata da bose il 04/02/2010 alle 19:23
Postato originariamente da ingMark: ma in c le variabili locali non vengono automaticamente inizializzate a 0?
Mi pare sia cosi
No ... affatto ...
Testo quotato
Postato originariamente da bose: kk la immetto io con
Codice sorgente ...
kk non è inizializzata nella funzione cerca_max ... non capisco dove la inizializzi, come dici di fare (a parte che non si inizializza con una printf ...)
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.