Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2014
    Messaggi
    58

    [C] errore di segmentazione, programma non funziona

    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.
    codice:
    #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?

  2. #2
    Utente di HTML.it L'avatar di Nikopol
    Registrato dal
    Jan 2011
    Messaggi
    120
    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.
    La Guida Galattica è infallibile.
    È la realtà, spesso, ad essere inesatta.

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2014
    Messaggi
    58
    Quote Originariamente inviata da Nikopol Visualizza il messaggio
    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

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    577
    ti aveva detto questo

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

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2014
    Messaggi
    58
    Quote Originariamente inviata da misterx Visualizza il messaggio
    ti aveva detto questo

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

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.