|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Oct 2005
Messaggi: 3
|
[C] Problema scrittura - urgentissimo !!!
ciao,
scusate se vi disturbo ma ho un problema. ieri ho scritto, compilato ed eseguito decine di volte il seguente programma senza alcun intoppo.oggi provando ad eseguirlo nuovamente sullo stesso computer(e anche su un altro) continuo a ricevere un messaggio di errore al termine dell'esecuzione(pur non avendo apportato alcuna modifica al programma) ed il file denominato errori rimane vuoto.facendo il debug il programma si blocca ogni volta in un punto diverso ma sempre durante la scrittura del file errori.txt.è anche apparso l'errore : "Il programma ha causato una violazione di accesso(errore di segmentazione)" qualcuno sa dirmi a cosa può essere dovuto tale problema? vi ringrazio in anticipo per il vostro aiuto. Codice:
#include <stdio.h> #include<time.h> main() { int A, B, c, i, j, k, l,x,h, cicli, s, n_tempi, ciclo_in,temp,n_err,somma,t,z; srand(time(NULL)); printf("Durata simulazione in ns?\n "); scanf("%d", &B); cicli=B/20; printf("N di cicli:%d\n",cicli); x=cicli * 1024; controllo2: printf("Numero di errori da inserire?( max %d)\n ",x); scanf("%d", &A); if (A>x) { printf("Numero errori troppo elevato\n"); goto controllo2; } controllo: n_tempi=rand() % (cicli+1); if (n_tempi > A) goto controllo; if (n_tempi ==0) goto controllo; if (n_tempi<(A/1024)) goto controllo; printf("Numero di iniezioni:%d\n",n_tempi); FILE *fp,*fp2; if ((fp = fopen("errori.txt", "w")) ==NULL) { printf("Error opening file errori\n"); system("PAUSE"); exit(1); } if ((fp2 = fopen("tempi.txt", "w")) ==NULL) { printf("Error opening file tempi\n"); system("PAUSE"); exit(1); } int tempo_in[n_tempi]; for (s=0;s<n_tempi;s++) { casuale: ciclo_in=rand() % cicli; if (ciclo_in==0) goto casuale; tempo_in[s]=(ciclo_in * 20); for (j=0;j<(s-1);j++) { if (tempo_in[j]==tempo_in[s]) goto casuale; } } /* ordina il vettore */ for (i=0; i<n_tempi; i++) { /* confronta ciascuno dei valori... */ for (j=i+1; j<n_tempi; j++) /* ...con tutti i successivi */ { if (tempo_in[j] < tempo_in[i]) /* e se uno dei successivi e' minore */ { /* lo scambia con esso */ temp = tempo_in[i]; tempo_in[i] = tempo_in[j]; tempo_in[j] = temp; } } } for (s=0;s<n_tempi;s++) { fprintf(fp2,"%d\n",tempo_in[s]); } fclose(fp2); int y[n_tempi]; for (i = 0; i < n_tempi; i++) y[i] = 1; for (i = (A - n_tempi); i > 0;) { int j = rand() % n_tempi; // int j = (int)(((float)rand() / (float)RAND_MAX) * (float)N); if (y[j] < 1024) { y[j] += 1; i -= 1; } } somma=0; n_err=0; for (i=0;i<n_tempi;i++) { printf("%d\n",y[i]); somma += 1; n_err += y[i]; } printf("%d\n",somma); printf("%d\n",n_err); int arr[n_tempi][8][128]; gen: for (i=0;i<n_tempi;i++) { for (j=0;j<8;j++) { for (k=0;k<128;k++) arr[i][j][k]=0; } } for (i=0;i<n_tempi;i++) { for (h=0;h<y[i];) { j=rand() % 8; k=rand() % 128; if (arr[i][j][k]==0) { arr[i][j][k]=1; h+=1; } } } for (i=0;i<n_tempi;i++) { for (j=0;j<8;j++) { for (k=0;k<128;k++) { fprintf(fp,"%d",arr[i][j][k]); if (k==15 || k==31 || k==47 || k==63 || k==79 || k==95 || k==111) fprintf(fp,"\t"); } fprintf(fp,"\n"); } } fclose(fp); system("PAUSE"); return 0; } |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
1) Includi <stdlib.h>
2) Se vuoi scrivere un sorgente in puro standard "ANSI C" devi: - evitare di dichiarare variabili in mezzo al codice (es. dove hai messo FILE *fp,*fp2; ) - evitare i commenti // - evitare di dichiarare array con dimensione variabile. 3) Evita come la peste l'uso dei goto e cerca di usare la programmazione strutturata (cicli while, do-while ecc...) 4) Scrivi il sorgente ben indentato e spaziato. Così come l'hai postato non si capisce nulla ....
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
E suddividilo in funzioni...
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:35.