PDA

Visualizza la versione completa : [C] errore di segmentazione, programma non funziona


sheldon
11-12-2014, 19:35
Ciao a tutti
Stavo facendo un programma in C tale che, se io inserisco uno specifico carattere dalla tastiera, va ad incrementare il valore di una variabile, finché inserendo uno specifico carattere l'esecuzione si ferma e vengono mostrati i valori delle variabili incrementate. Tutto ciò va scritto in un file.
Il codice di seguito mi dà errore di segmentazione.

#include <stdio.h>#include <stdlib.h>


int main(){


int i = 0;
char c;
int counter[2];
FILE *m;




printf("\n *****CONTATORE*****\n");
printf("Premi invio per i CIAO, premi c per le COMBO,\n premi f per terminare l'esecuzione\n");





while(i == 0){
fopen("contatore.dat", "w");
if((c = getchar()) == '\n'){
counter[0]++;
printf("ciao\n");
fprintf(m,"ciao +1\n");
}else if((c = getchar()) == 'c'){
counter[1]++;
printf("combo!\n");
fprintf(m,"combo +1\n");
}else if((c = getchar()) == 'f'){
printf("Il numero di ciao totali è stato di: %d\n", counter[0]);
printf("Il numero di combo totali è stato di: %d\n", counter[1]);
printf("Per un totale di %d\n", counter[0] + counter[1]);
fprintf(m,"Il numero di ciao totali è stato di: %d\n", counter[0]);
fprintf(m,"Il numero di combo totali è stato di: %d\n", counter[1]);
fprintf(m,"Per un totale di %d\n", counter[0] + counter[1]);
fclose(m);
exit(0);
}
}

}




Se tolgo la scrittura su file il programma funziona solo se premo invio, mentre se premo gli altri due caratteri scelti (seguiti da invio) non succede niente.
Mi date una mano?:dhò:

Nikopol
11-12-2014, 22:23
Ciao, devi assegnare a m il puntatore restituito dalla fopen, altrimenti alla prima fprintf tenti di scrivere in un indirizzo non specificato, che probabilmente non appartiene alla spazio di memoria del tuo processo, quindi il sistema lancia un segmentation fault.

sheldon
12-12-2014, 00:03
Ciao, devi assegnare a m il puntatore restituito dalla fopen, altrimenti alla prima fprintf tenti di scrivere in un indirizzo non specificato, che probabilmente non appartiene alla spazio di memoria del tuo processo, quindi il sistema lancia un segmentation fault.

Grazie! potresti scrivermi il codice così vedo se ho capito bene?

Poi volevo sapere se è giusto scrivere i caratteri in getchar() così.. perché a parte l'invio ('\n') gli altri, che sono lettere, non me li prende

misterx
12-12-2014, 00:20
ti aveva detto questo

m=fopen("contatore.dat", "w");

sheldon
12-12-2014, 00:36
ti aveva detto questo

m=fopen("contatore.dat", "w");
Grazie :D

Loading