|
|||||||
|
|
|
![]() |
|
|
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 .... mi tengo comunque buona la spiegazione il ciclo while bisogna incrementarlo subito
|
|
|
|
|
|
#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
grazie
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:20.












.... mi tengo comunque buona la spiegazione il ciclo while bisogna incrementarlo subito
grazie







