Problema legato all'inserimento di una variabile

di Anonimizzato12379 il
5 risposte
Ciao a tutti . Ho un problema con un programmino che sto facendo per un corso all'università.
Il codice in questione funziona ma se provo ad aggiungere altre variabili al programma per implementare altri calcoli il terminale inzia a scrivere una serie di zeri per poi terminarsi .
Ho provato ad escludere diverse cose ma il risultato è sempre lo stesso , se aggiungo un ulteriore variabile e provo a farla scrivere su terminale il programma "sballa". Grazie in anticipo
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<malloc.h>

int main() {
FILE *ifp,*ofp;
int i,d,n,c,dim ; 
const int MAXCHARS=100;
char inp_name[ MAXCHARS],out_name[ MAXCHARS] ;
double *x, *y;
long double fi,xi;
printf("File da aprire \n");
scanf("%s",inp_name);
ifp = fopen(inp_name,"r");
printf("File uscita \n");
scanf("%s",out_name);
ofp=fopen(out_name,"w");
if(ifp == NULL){
  printf("cannot open input file \n");
  exit(1);
  }
   while((c=getc(ifp)) != EOF){
     if( c == '\n') dim++;
      }
fclose(ifp);
x=(double *)malloc(dim*sizeof(double));
y=(double *)malloc(dim*sizeof(double));
ifp = fopen(inp_name,"r");
for(i=0;i<=dim;i++){
  fscanf(ifp, "%lf %lf  ", &x[i], &y[i]);
  printf("%lf %lf \n", x[i], y[i]);
}
// interpolazione lineare dei dati
printf("Dati interpolazione \n " );
scanf(" %d" , &d);
printf (" %d \n", d);
for (i=0; i<d;i++){
  xi=i*((x[dim]-x[0])/d)+x[0];
  for (n=0;n<=dim;n++){
    if (xi<= x[n+1] && xi>x[n]){
      fi=y[n]+((xi-x[n])/(x[n+1]-x[n]))*(y[n+1]-y[n]);
      printf("%Lf %Lf  \n ", xi ,fi);
      }
  }
  
}
 
 fclose (ifp);
 fclose(ofp);
 free(x);
 free(y);

  return 0;
}

5 Risposte

  • Non

    for(i=0;i<=dim;i++){

    ma

    for(i=0;i<dim;i++){
  • Ho appena provato ma non cambia nulla, appena inserisco una nuova variabile iniza a stampare zeri a ripetizione Come ti riporto qui sotto ho solo aggiunto una variabile t cercando di farla stampare e sul mio terminale fa cose strane
    #include<stdio.h>
    #include<math.h>
    #include<stdlib.h>
    #include<malloc.h>
    
    int main() {
    FILE *ifp,*ofp;
    int i,d,n,c,dim ; 
    const int MAXCHARS=100;
    char inp_name[ MAXCHARS],out_name[ MAXCHARS] ;
    double *x, *y[color=#BFBF00],t;[/color]
    long double fi,xi;
    printf("File da aprire \n");
    scanf("%s",inp_name);
    ifp = fopen(inp_name,"r");
    printf("File uscita \n");
    scanf("%s",out_name);
    ofp=fopen(out_name,"w");
    if(ifp == NULL){
      printf("cannot open input file \n");
      exit(1);
      }
       while((c=getc(ifp)) != EOF){
         if( c == '\n') dim++;
          }
    fclose(ifp);
    x=(double *)malloc(dim*sizeof(double));
    y=(double *)malloc(dim*sizeof(double));
    ifp = fopen(inp_name,"r");
    for(i=0;i<dim;i++){
      fscanf(ifp, "%lf %lf  ", &x[i], &y[i]);
      printf("%lf %lf \n", x[i], y[i]);
    }
    // interpolazione lineare dei dati
    printf("Dati interpolazione \n " );
    scanf(" %d" , &d);
    printf (" %d \n", d);
    for (i=0; i<d;i++){
      xi=i*((x[dim-1]-x[0])/d)+x[0];
      for (n=0;n<dim;n++){
        if (xi<= x[n+1] && xi>x[n]){
          fi=y[n]+((xi-x[n])/(x[n+1]-x[n]))*(y[n+1]-y[n]);
         [color=#8080BF] t=90.2;[/color]
          printf("%Lf %Lf %lf \n ", xi ,fi,t);
          
          }
      }
      
    }
     
     fclose (ifp);
     fclose(ofp);
     free(x);
     free(y);
    
      return 0;
    }
    
    
  • All'inizio manca anche una

    dim=0;
  • Grazie mile si è risolto
  • In C una variabile non inizializzata non parte da 0

    Se non la azzeri esplicitamente il suo valore iniziale sarà casuale e questo, ovviamente, fa crashare il resto del programma...
Devi accedere o registrarti per scrivere nel forum
5 risposte