Oppure

Loading
10/10/08 11:24
bigjohn
Salve a tutti.
Innanzitutto ringrazio per la cortese disponibilità tutti coloro disposti a trovare una soluzione a questo quesito.
Intanto vediamo la seguente definizione:
una parola è palindroma quando letta "da sinistra a destra" o "da destra a sinistra" presenta la stessa sequenza di caratteri.
Esempi di parole palindrome sono:
- anna
- otto
- acca
- erre
- esse
- ossesso
- esose
ecc.

Il programma C propostomi, e' di verificare se una parola è palindroma.
Purtroppo il codice sottostante non va bene in quanto mi da sempre la medesima risposta "la sequenza è palindroma"
indipendentemente che la parola digitata sia o meno palindroma.
Riuscite cortesemente a trovare l'errore?

//---- inizio codice ----------
#include <stdio.h>
#include <stdlib.h>

#define MAX 32

int main()
{

char vett[MAX];
int lvet;
int i, j;

do {
printf("Inserire la lunghezza della sequenza: ";); //di quanti caratteri è composta la parola?
scanf("%d", &lvet);
} while ((lvet>MAX) || (lvet<=0));
printf("Inserire la sequenza:\n";); //qual e' la parola da verificare?
for (i=0; i<lvet; i++)
scanf("%c", & vett[i]);

i = 0;
j = lvet - 1;

while((i < lvet) && (vett[i] == vett[j]))
{
i += 1;
j -= 1;

}
if (i >= lvet)
printf("La sequenza e' palindroma.\n";);
else
printf("La sequenza non e' palindroma.\n";);

system("pause";);
}

//---- fine codice ---------------

Grazie per l'attenzione.
Gianni.
aaa
10/10/08 12:13
gioser
Postato originariamente da bigjohn:

nel tuo post sono spariti gli indici degli array, quando la variabile era i, ma suppongo che sia a causa del fatto che "aperta quadra" "i" "chiusa quadra" è il tag per impostare il corsivo dei post. Il codice andrebbe messo tra i tag "code"

    for (i=0; i<lvet; i++)
        scanf("%c", & vett[i]);



il problema è che al primo giro la scanf legge il carattere 10 che rimane nel buffer dopo aver letto lvet

per cui a un input di

4
anna

segue la lettura di vett come:

vett[0] = '\n'
vett[1] = 'a'
vett[2] = 'n'
vett[3] = 'n'

per risolvere questo problema puoi premettere uno spazio nella stringa di formato della scanf:

    for (i=0; i<lvet; i++)
        scanf(" %c", & vett[i]);


Ovviamente ci sono modi migliori di leggere una stringa ;)
Ultima modifica effettuata da gioser 10/10/08 12:14
aaa
10/10/08 13:09
bigjohn
grazie per il cortese e tempestivo riscontro.
Adesso funziona... era questione dello spazio.
Se hai una soluzione migliore della mia da proporre, ogni consiglio è sempre ben accetto!!
aaa