|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Oct 2006
Città: Milano
Messaggi: 36
|
esercizio stringa help
Ciao a tutti... ho provato a fare un esercizio con le stringhe per familiarizzare con esse e il programma non gira e non capisco il perchè... qualcuno può aiutarmi?
l'esercizio consiste semplicemente nell'acquisire una stringa e nel visualizzarla. Il codice che ho scritto è questo, mi aiutate a trovare l'errore ![]() utilizzo DEV-C++ #include<stdio.h> #define max 10 main() {char stringa[max]; int i; printf("Inserisci una parola palindrome terminata dal carattere '#'\n\n"); /*acquisizione parola*/ i=0; printf("carattere: "); scanf("%c",&stringa[i]); fflush(stdin); while(stringa[i] != '#') {printf("carattere: "); scanf("%c",&stringa[i]); fflush(stdin); i++; } //visualizzazione parola while(stringa[i] != '\0') {printf("%c",stringa[i]); i++; } getchar(); } Il problema è che non mi esce dal ciclo while.... io continio a inserire lettere all'infinito... un grazie in anticipo |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
Quote:
|
|
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Jan 2007
Messaggi: 189
|
il problema era che incrementavi i dopo aver assegnato stringa[i], al ciclo successivo dunque non controllavi il carattere appena immesso.
Codice:
#include<stdio.h> #define max 10 main() { char stringa[max]; int i; printf("Inserisci una parola palindrome terminata dal carattere '#'\n\n"); /*acquisizione parola*/ i=0; printf("carattere: "); scanf("%c",&stringa[i]); fflush(stdin); while(stringa[i] != '#') { i++; // incremeta qui il contatore printf("carattere: "); scanf("%c",&stringa[i]); fflush(stdin); } stringa[i] = '\0'; // setta la fine della stringa i = 0; // riporta il contatore a zero per visualizzare la stringa while(stringa[i] != '\0') { printf("%c",stringa[i]); i++; } getchar(); } poi prima di iniziare il ciclo devi impostare i = 0 ciao |
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: Oct 2006
Città: Milano
Messaggi: 36
|
cristallino
Hai risposto in modo molto chiaro grazie...
avevo provato a scrivere il ciclo anche in questo modo: #include<stdio.h> #define max 10 main() { char stringa[max]; int i; printf("Inserisci una parola palindrome terminata dal carattere '#'\n\n"); /*acquisizione parola*/ i=0; while(stringa[i] != '#') { printf("carattere: "); scanf("%c",&stringa[i]); fflush(stdin); i++; // incremeta qui il contatore } stringa[i] = '\0'; // setta la fine della stringa i = 0; // riporta il contatore a zero per visualizzare la stringa while(stringa[i] != '\0') { printf("%c",stringa[i]); i++; } getchar(); } Ossia l'inserimento del I carattere lo faccio all'interno del ciclo... perchè non gira neanche in questo modo?? Al fatto che dovevo settare la fine della stringa ufff non ci sarei mai arrivato Ancora grazie |
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: Jan 2007
Messaggi: 189
|
il problema è sempre lo stesso
per risolvere imposta i = -1 fuori dal ciclo, all'interno del ciclo incrementa subito i Codice:
#include<stdio.h> #define max 10 main() { char stringa[max]; int i; printf("Inserisci una parola palindrome terminata dal carattere '#'\n\n"); /*acquisizione parola*/ i = -1; while(stringa[i] != '#') { i++; // incremeta qui il contatore printf("carattere: "); scanf("%c",&stringa[i]); fflush(stdin); } stringa[i]='\0'; // setta la fine della stringa i=0; // riporta il contatore a zero per visualizzare la stringa while(stringa[i] != '\0') { printf("%c",stringa[i]); i++; } getchar(); } |
![]() |
![]() |
![]() |
#6 |
Member
Iscritto dal: Oct 2006
Città: Milano
Messaggi: 36
|
i = -1;
while(stringa[i] != '#') { i++; // incrementa qui il contatore printf("carattere: "); scanf("%c",&stringa[i]); fflush(stdin); } così gira perfettamente! i=0; while(stringa[i] != '#') { printf("carattere: "); scanf("%c",&stringa[i]); fflush(stdin); i++; // incremeta qui il contatore } Così cicla all'infinito. Se non mi sbaglio i cilci sono identici.... forse il motivo è perchè non gira è che il ciclo while, quando si utilizzano le stringhe bisogna incrementarlo subito obbligatoriamente? C'è per caso qualche regola fissa da seguire? perchè anche utilizzando il for cicla all'infinito for(i=0; stringa[i] != '#'; i++) { printf("carattere: "); scanf("%c",&stringa[i]); fflush(stdin); } poi fai conto che con questo esercizio chiudo perchè ci sto sbattendo troppo la testa... fai conto che l'esercizio è quello dalla parola palindrome e guarda qua dove sono andato a finire ![]() |
![]() |
![]() |
![]() |
#7 |
Member
Iscritto dal: Jan 2007
Messaggi: 189
|
Codice:
i = -1; do { i++; printf("carattere: "); scanf("%c",&stringa[i]); fflush(stdin); } while(stringa[i] != '#'); la differenza tra i 2 cicli e che se tu incrementi i dopo aver assegnato il valore a stringa[i] quando esegui il controllo stringa[i] != '#' nel ciclo, stringa[i] non sarà il carattere appena inserito ma il carattere successivo all'interno della stringa (che non è stato ancora assegnato) se invece incrementi i prima dell'assegnamento il controllo verrà effetuato sul carattere corretto |
![]() |
![]() |
![]() |
#8 |
Member
Iscritto dal: Oct 2006
Città: Milano
Messaggi: 36
|
woooooooooooooow diciamo che sono un bel po' 'turduni'... ho dovuto infatti leggere la spiegazione 2 volte ma ora è chiaaaaaro!!!! che bella sensazione heheheh
![]() ![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:42.