Newsgroup: it.comp.lang.c
Titolo: ma perche' non mi .....

funziona sto programma???
io devo prendere in input una stringa e la devo capovolgere....
devo usare per forza la malloc
posso solo scegliere i byte che devo riservare in memoria  (con il
parametro max)...
non mi funziona,,,,,,dov'e' il problema??
ps: uso il Turbo C 3.0
#include <stdio.h>
#include <string.h>
int max,i,k;
void main()
{
char *v;
clrscr();
scanf("%d",&max);
v=(char *) malloc( max * sizeof(char));
printf("\n Inserisci la stringa ");
gets(v);
k=strlen(v);
for (i=k-1;i!=0;i--)
 {
	printf("%c",*v--);  }      /* torno indietro e stampo*/
free(v);
}


ICQ #34602650

parametro max)...
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void flush_input ()
{
     while ( getchar() != '\n' ) ;
}
int main()   /* NON void main() */
{
     char * v ;
     int max, i, l ;
     printf ( "numero massimo di caratteri = " ) ;
     scanf ( "%d", &max ) ;
     flush_input () ;
     v = malloc ( max + 1 ) ;
     printf ( "\ninserisci la stringa : " ) ;
     fgets ( v, max, stdin ) ;
     l = strlen ( v ) ;
     for ( i = l - 1 ; i >= 0 ; i-- )
	putchar ( v [i] ) ;
     putchar ( '\n' ) ;
     free ( v ) ;
     return 0 ;
}

}
Se proprio vuoi usare questo metodo ( molto scomodo secondo me )
correggi la condizione da i != 0 a i >= 0 altrimenti salti il primo
carattere.
#include <stdio.h>
int main()
{
    char * v = ")))))-:", * ptr ;
    int i, k ;
    k = strlen ( v ) ;
    ptr = v + ( k - 1 ) ;
 
    for (i = k -1 ; i >= 0; i--)
        printf ( "%c", *ptr-- ) ;
}

 	printf("%c",*v--);  }      /* torno indietro e stampo*/
il ciclo for va cosi':
for (i = k - 1; i >= 0; i--)
	printf ("%c", v[i]);
Cosi' dovrebbe andare... :-)
bye!
Ema ;-)
-- 
"Colui che sorride quando le cose vanno male ha pensato a qualcuno cui dare
la colpa", legge di Jones

un altro fatto strano...provate un po voi
char *v;
scanf("%d",&max);        /* dico quanto spazio mi serve in memoria */
v= (char*) malloc (max *sizeof(char));
gets(v)
ecco....qui il programma non mi accetta la GETS....cioe' passa senza
farmi acquisire la stringa che devo girare
COME MAI?-------forse perche' la v contiene un carattere \x0 che e' il
carattere invio??? perche'? dove lo va a prendere?????!?!??!
Grazxie

carattere invio??? perche'? dove lo va a prendere?????!?!??!
Il problema e' dovuto al fatto che scanf() termina la lettura
dell'input quando incontra un carattere che non risponde al formato
che le e' stato passato.
E \n e' uno di questi.
Rimane pertanto nel buffer di input.
Quando si va a chiamare gets(), quest'ultima non richiede l'input
all'utente, in quanto trova il buffer ancora pieno e preleva quindi da
esso.
Nell'altro messaggio che ho spedito ti ho fatto vedere come si puo'
aggirare l'ostacolo utilizzando una semplice funzione del tipo :


 che le e' stato passato.
Certo che questa č una faq molto frequently da queste parti... :-)
EMG

Certo che questa è una faq molto frequently da queste parti... :-)
E gia'.
Magari scrivere le FAQ del gruppo eviterebbe di postare cosi' tante
volte lo stesso fastidioso messaggio. ;)
Perche' non farlo ?

andrea_...@bigfoot.com
 (Andrea Laforgia) writes:

Perche' non leggere le FAQ di comp.lang.c?  Ad esempio Q/A 12.18, che
dice:
12.18:  I'm reading a number with scanf %d and then a string with
        gets(), but the compiler seems to be skipping the call to
        gets()!
Ovvero: perche' rifare un lavoro ottimo di Steve Summit anziche'
leggerselo?
-- 
Maurizio Loreti                      
http://wwwcdf.pd.infn.it/~loreti/mlo.html
Un. of Padova, Dept. of Physics - Padova, Italy          
lor...@padova.infn.it

leggerselo?
Per tre validi motivi, credo :
1) sarebbero in italiano.
2) non si e' soggetti a comp.lang.c.
3) potrebbero comparire domande e risposte che sulla FAQ americana non
compaiono.

 compaiono.
Questo e' MOOOOLTO difficile.  Se le guardi, hanno una varieta' di
informazioni estremamente completa; penso che sia impossibile far di
meglio, a meno di metterci anni.  E se intendi cose che non hanno
nulla a che vedere col linguaggio, ma che riguardano solo
programmazione in ambienti Microsoft, e' giusto che non ci siano.  Non
sono pertinenti (anche se qui non si fa che parlar di quello).


 Perche' non farlo ?
Non esistono già? In caso negativo, sono disponibile se il lavoro viene
ben organizzato e diviso. Ci pensi tu?
EMG

 leggerselo?
Giustissimo.
EMG

 compaiono.
Giusto anche questo. Che facciamo? Decidete voi...
EMG

 wrote:
[ snip ]
L>ecco....qui il programma non mi accetta la GETS....cioe' passa senza
L>farmi acquisire la stringa che devo girare
L>COME MAI?-------
Il '\n' e' rimasto nel buffer di input.
Devi leggerlo esplicitamente, per esempio con
scanf("%d%*c", &max);
Ciao ciao,
Andrea
-- 
"...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and 
 the Ugly)."
(by Matt Welsh)

sono pertinenti (anche se qui non si fa che parlar di quello).
Non ho detto affatto questo.
Non e' vero secondo me che si parli troppo degli ambienti Microsoft.
Anzi, francamente il compilatore che vedo nominato piu' di frequente
e' proprio il gcc che gira su diverse piattaforme.

Giusto anche questo. Che facciamo? Decidete voi...
Un'idea: tradurle? O postare il link ogni tanto?
Il fatto e' che molto spesso la conoscenza dell'inglese non e'
perfetta, e quindi si tende a comprendere male un concetto. E mettere
in pratica un concetto appreso male...
--
(o-  T | If Bill Gate$ had a nickel for every time window$ crashed...
//\  U | ... oh, wait, he does...
V_/_ X | email: r.salmaso (at) 
flashnet.it
 | pinguin (at)
linuxfan.com
VDK (C++ GUI lib) 
http://www.guest.net/homepages/mmotta/VDKHome
VDKBuilder (RAD Tool) 
http://www.guest.net/homepages/mmotta/vdkbuilder

carattere invio??? perche'? dove lo va a prendere?????!?!??!
perchè la scanf è una funzione fatta coi piedi.
non andrebbe usata insieme a scanf (o a getch, getche etc)

 non andrebbe usata insieme a scanf (o a getch, getche etc)
Non assieme a se stessa?  Strano...  Cosa sono "getch" e getche"?  Non
ne ho mai sentito parlare.  Forse volevi dire getc(3)?
