Puntatore a array di record

di il
5 risposte

Puntatore a array di record

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#define L 2
#define LUNG 21

/*Dichiarare un vettore di record, ciascuno strutturato con due campi: un intero
e una stringa. Per TUTTI i record del vettore, acquisire il campo stringa.
Secondariamente, in un ciclo successivo, inizializzare TUTTI i campi interi con 
le lunghezze dei corrispondenti campi stringa, stavolta accedendo indirettamente
ai due campi di ciascun record.
*/


int main(int argc, char *argv[])
{struct STR
   {int lung;
   char str[LUNG];
   }vett[L];
   struct STR*P=vett;
   int a,b=0;
   
   system("CLS");
   
   for(a=0;a!=L;a++)
   {printf("Inserisci una stringa di MAX %d caratteri\n",LUNG-1);
   scanf("%s",(vett[a]).str);
   fflush(stdin);
   };
   
   for(a=0;a!=L;a++)
      {b=0;
       while(((P[a]).str[b])!="\0")
         {b++;
         };
       P[a].lung=b;
      };
      
   for(a=0;a!=L;a++)
      {printf("La stringa %d e' lunga %d",a,vett[a].lung);
      };
   

  
  system("PAUSE");	
  return 0;
}
Non capisco perchè va male in esecuzione

5 Risposte

  • Re: Puntatore a array di record

    "Va male" che vuol dire?
  • Re: Puntatore a array di record

    Hai provato con le bacche di goji?
  • Re: Puntatore a array di record

    In esecuzione crasha
  • Re: Puntatore a array di record

    Ma una linea del genere

    while(((P[a]).str)!="\0")

    non dovrebbe neanche compilarla. Sicuro che il problema sia in esecuzione? Quale compilatore l'ha compilato?
  • Re: Puntatore a array di record

    D:\C_C++\CodeBlock\iop\main.c||In function 'main':|
    D:\C_C++\CodeBlock\iop\main.c|169|warning: comparison between pointer and integer [enabled by default]|
    D:\C_C++\CodeBlock\iop\main.c|169|warning: comparison with string literal results in unspecified behavior [-Waddress]|
    ||=== Build finished: 0 errors, 2 warnings (0 minutes, 1 seconds) ===|
    ma cosi sarebbe stato troppo semplice?
    
    while( P[a].str[b] != '\0' )
    
    poi i ; non vanno mai dopo le graffe!
    
      for(a=0;a!=L;a++)
          {b=0;
           while( P[a].str[b] != '\0' )
             {b++;
             }
           P[a].lung=b;
          };
    
    codice cosi scritto si fatica a capire.
    
    for( a = 0; a < L; a++)
    {
        int b;
        for ( b = 0; P[a].str[b] != '\0' ; b++)
            ;//ciclo vuoto perchè b avanza fino a \0 ma b sarà piu grande di un valore
    
           P[a].lung = b - 1; //tolgo il valore in eccesso
    }
    
Devi accedere o registrarti per scrivere nel forum
5 risposte