cristian3095 (Normal User)
Pro
Messaggi: 66
Iscritto: 24/09/2010
|
salve a tutti....ho creato un piccolo programma in C che restituisce una stringa all'inverso....ad esempio se scrivo "Ciao" mi stampa "oaiC".....fin qui tutto bene....volevo far ricominciare il programma alla pressione del tasto "1".....il programma effettivamente ricomincia....però se inserisco una parola salta tutto e va alla fine infatti mi dice "1) Riprova" qual'è il problema
Ecco il codice:
Codice sorgente - presumibilmente C++ |
#include <stdio.h> main() { char array_imput[100]; int b,a,i,o,stringa; do{ b=0;a=0;i=0;o=0;stringa=1; printf("Inserisci una stringa \n"); for (o=0;o=100;o++){ stringa=getchar(); array_imput[i]=stringa; if (stringa==10){ i--; break; }i++; } for(o=0;o=100;o++){ printf("%c",+ array_imput[i]); i--; if(i < 0){ break; } } printf("\n\n1) Riprova\n2)Esci\n"); scanf("%d",&b); }while(b==1); }
|
Ultima modifica effettuata da cristian3095 il 08/12/2010 alle 19:46 |
|
Alex (Ex-Member)
Expert
Messaggi: 441
Iscritto: 15/08/2005
|
un errore che mi è saltato subito all'occhio è la condizione logica del for...è un assegnamento e non un controllo..
io più semplicemente avrei letto la stringa e poi l'avrei stampata al contrario...
|
|
Pitagora (Member)
Expert
Messaggi: 367
Iscritto: 12/06/2010
|
Dichiara la variabile b non come int ma come char, modificando cosí la riga 25 26
Codice sorgente - presumibilmente Plain Text |
printf("\n\n1) Riprova\n2)Esci\n");
scanf("%c\n",&b);
}while(b=='1');
|
|
|
Alex (Ex-Member)
Expert
Messaggi: 441
Iscritto: 15/08/2005
|
Postato originariamente da Pitagora:
Dichiara la variabile b non come int ma come char, modificando cosí la riga 25 26
Codice sorgente - presumibilmente Plain Text |
printf("\n\n1) Riprova\n2)Esci\n");
scanf("%c\n",&b);
}while(b=='1');
|
|
guarda che funziona lo stesso se la variabile è un int..non credo che sia quello il problema.. |
|
Pitagora (Member)
Expert
Messaggi: 367
Iscritto: 12/06/2010
|
Postato originariamente da Alex:
Postato originariamente da Pitagora:
Dichiara la variabile b non come int ma come char, modificando cosí la riga 25 26
Codice sorgente - presumibilmente Plain Text |
printf("\n\n1) Riprova\n2)Esci\n");
scanf("%c\n",&b);
}while(b=='1');
|
|
guarda che funziona lo stesso se la variabile è un int..non credo che sia quello il problema.. |
Prova! |
|
Alex (Ex-Member)
Expert
Messaggi: 441
Iscritto: 15/08/2005
|
Postato originariamente da Pitagora:
Postato originariamente da Alex:
Postato originariamente da Pitagora:
Dichiara la variabile b non come int ma come char, modificando cosí la riga 25 26
Codice sorgente - presumibilmente Plain Text |
printf("\n\n1) Riprova\n2)Esci\n");
scanf("%c\n",&b);
}while(b=='1');
|
|
guarda che funziona lo stesso se la variabile è un int..non credo che sia quello il problema.. |
Prova! |
non ho un compilatore sotto mano, ma deve per forza andare!! leggo un intero e controllo se è uguale a 1... |
|
cristian3095 (Normal User)
Pro
Messaggi: 66
Iscritto: 24/09/2010
|
no...non va D: sempre lo stesso problema....
|
|
lumo (Member)
Expert
Messaggi: 449
Iscritto: 18/04/2010
|
Codice sorgente - presumibilmente C++ |
#include <stdio.h> #define SIZE 100 main() { int i; int continua = 0; char string[SIZE]; char ch; do { for( i=0; i<SIZE; i++ ) { ch = getchar(); if ( ch == '\n' ) { i--; break; } // else string[ i ] = ch; } for( ; i>= 0; i-- ) { putchar( string[ i ] ); } putchar( '\n' ); printf("\n\n1) Riprova\n2)Esci\n"); scanf("%d",&continua); }while( continua == 1 ); return 0; }
|
manca il primo pezzo ma metticelo tu XD
Comunque, ho usato una macro, è ho definito SIZE usandola nel sorgente.
Se non hai ancora fatto puoi benissimo togliere la riga che comincia con #define e sostituire a SIZE, nel srogente, e mettere 100. Il vantaggio di questo sarebbe che se vuoi mettere al posto di 100, che ne so, 50, allora non devi modificare in giro per il programma ma modifichi solo la macro.
Usare un indice per il for e uno per l'array in questo caso non era necessario perchè crescono in modo uguale.
Nel for, come ha già notato da Alex, hai messo o=100, mentre sarebbe o==100; io ho usato <, minore, che in questo contesto è equivalente.
Nel secondo for, oltre a semplificare, ho usato putchar(), che sarebbe il contrario di getchar(), se vuoi rimetti pure la printf.
Se hai dubbi chiedi pure :-)
ah e ATTENZIONE: è "input" non "imput". E' Inglese mica Italiano XD
Ultima modifica effettuata da lumo il 11/12/2010 alle 16:10 |
|
cristian3095 (Normal User)
Pro
Messaggi: 66
Iscritto: 24/09/2010
|
Niente da fare non funziona.....adesso non mi stampa nemmeno la stringa al contrario..... "può darsi che il problema sia che l'array non viene svuotato?".....
non so più dove metterci le mani D:
Nella foto si vede quello che succede con il codice che ho postato all'inizio....
Ultima modifica effettuata da cristian3095 il 11/12/2010 alle 15:22 |
|