Newsgroup: it.comp.lang.c
Titolo: Cerco aiuto per enigma







Ho da poco ripreso la programmazione C , seguendo 
l'iter di alcuni corsi trovati in rete mi sono trovato ad avere un 
insormontabile problema su un programma molto semplice causa la funzione 
standard gets(). Di seguito allego i 2 sorgenti, uno funziona l'altro no perchè 
? (non fa la gets() )


 


#include <stdio.h>


 


int main(void)
{
   struct 
indirizzo {
      char  nome 
[80];
      char  via 
[80];
      char  citta 
[80];
      int   cap; };


 


   struct informazioni 
{
      struct indirizzo 
abitazioni[2];
      char  
segno_zodiacale[80];
      char  
vaccinazione[80];
      int   
mediascolastica;
      };


 


   struct informazioni 
persona;


 


   printf("\nDimmi il tuo segno 
zodiacale:
   gets(persona.segno_zodiacale);


 


   printf("\nDimmi il primo nome: 
");
   scanf("%s",&persona.abitazioni[0].nome);


 


   return(0);
}


 


#include <stdio.h>


 


int main(void)
{
   struct 
indirizzo {
      char  nome 
[80];
      char  via 
[80];
      char  citta 
[80];
      int   cap; };


 


   struct informazioni 
{
      struct indirizzo 
abitazioni[2];
      char  
segno_zodiacale[80];
      char  
vaccinazione[80];
      int   
mediascolastica;
      };


 


   struct informazioni 
persona;


 


   printf("\nDimmi il primo nome: 
");
   scanf("%s",&persona.abitazioni[0].nome);


 


   printf("\nDimmi il tuo segno 
zodiacale: ");
   gets(persona.segno_zodiacale);


 


   return(0);
}


 


grazie 


 



 ? (non fa la gets() )
Prima della gets() prova a svuotare lo stream di input:
while ( getchar() != '\n' );
EMG

Invece delle gets() potresti utilizzare le due classi
cout<<
cin>>
definite nella libreria <iostream.h>
Ciao da Giovanni.
--
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                           Giovanni Ceglia
                WebMaster & WebDesigner
 
http://www.xungame.com/
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

 definite nella libreria <iostream.h>
che è un header e non una libreria...
ehm......
E comunque rimane il problema dello svuotamento dei buffer....
Ma qui si parla di C, non C++
--
Marco Iannaccone
marc...@tin.it
ICQ UIN: 18748121     MetalCoder
"This is a new ship, boy, but she's got the right name.
You treat her like a lady, and she'll always bring you home."
    Dr. Leonard H. McCoy to Data - Encounter at Farpoint - Star Trek TNG

definite nella libreria <iostream.h>
A parte il fatto che sono C++.
Hanno gli stessi problemi della gets, se non controlli con il metodo 
width.
bye,
mrmach

la gets() )
La gets semplicemente non si usa. Si usa la fgets.
Cerca da dove nacque il primo Worm su internet, e scoprirai che
la causa era la gets.
Correzione:
#include <stdio.h>
#define BUFSIZ 80 /* cosi e meglio */
int main(void)
{
   struct indirizzo {
      char  nome [BUFSIZ];
      char  via [BUFSIZ];
      char  citta [BUFSIZ];
      int   cap; };
   struct informazioni {
      struct indirizzo abitazioni[2];
      char  segno_zodiacale[BUFSIZ];
      char  vaccinazione[BUFSIZ];
      int   mediascolastica;
      };
   struct informazioni persona;
   char *break;
   printf("\nDimmi il tuo segno zodiacale:");
  /* quello sotto va tutto su una riga */
  if ((fgets(persona.segno_zodiacale, 
            sizeof(persona.segno_zodiacale), stdin))==NULL)
            /* errore durante la lettura da stdin */ 
            exit(1);
   break=strrchr(persona.segno_zodiacale,'\n');
   if (break != NULL) 
		*break = '\0';
 
Analogamente il resto.
L'utilizzo di scanf e gets, va adeguatamente rimpiazzato con sscanf e fgets.
Per maggiori info: 
http://www.cli.di.unipi.it/~zoppi/secprog.html
bye,
mrmach

che è un header e non una libreria...
e che, tra l'altro, non è neppura standard.
Anto
--
Antonio Cuni, 19 anni, studente
Brainbench C++ Master: 4.6, higher than 98% of all previous test takers.
C Language: 3.32, higher than 79% of all previous test takers.
Guida C/C++ di Programmazione.it: 
http://cpp.programmazione.it





Grazie per il prezioso 
aiuto







Grazie per gli interessanti spunti 
forniti.