il programma dovrebbe aprire il file di testo in basso a destra in modalità lettura e inserire i numeri che trova (uno per riga) ognuno in una lista linkata (pile, liste, code o alberi) per poi ordinarli in modo crescente.

#include <stdio.h>
#include "funzioni.h"

int main(char argv[], int argc){
        FILE *mfptr = NULL;
        struct  lista *ptr;

    if((mfptr = fopen("numeri.txt", "r") == NULL) {
         printf("impossibile aprire il file");
    }else{
    while(!feof(mfptr)) {
        fscanf(mfptr,"%f\n", &ptr->numeri);
        printf("%f", ptr->numeri);
        mfptr++;
        ptr->next = NULL;
    }
    fclose(mfptr);
    }

Non riesco neanche ad aprire il file, infatti all'esecuzione del programma mi dà errore di segmentazione, probabilmente devo allocare dinamicamente la memoria?

HELPPP MEEE!! grazie in anticipo a tutti.

alt text

chiesto 05 Jan '16, 20:06

danieleXubu's gravatar image

danieleXubu
14678

modificato 06 Jan '16, 15:48

enzotib's gravatar image

enzotib ♦♦
14.1k113187

1

Posta per favore il codice del programma, non un'immagine, così che si riesca a leggere e riscrivertelo corretto.

(06 Jan '16, 10:58) dadexix86 ♦♦ dadexix86's gravatar image
1

@danieleXubu: sono d'accordo con @dadexix86, comunque da quello che vedo stai usando un puntatore, cioè ptr, che non punta a niente.

(06 Jan '16, 12:25) enzotib ♦♦ enzotib's gravatar image

@danieleXubu alcuni commenti stilistici per la buona convivenza su questo sito: a meno di rispondere alla (tua) domanda principale usa i commenti e non le risposte, non urlare (scrivere in maiuscolo è urlare su internet) e infine utilizza i markup per il codice quando scrivi codice.

(06 Jan '16, 15:14) dadexix86 ♦♦ dadexix86's gravatar image

okey scusate non sapevo ci fosse differenza tra commenti e risposte, però non so proprio cosa voglia dire utilizza il markup per il codice..

(06 Jan '16, 15:43) danieleXubu danieleXubu's gravatar image

Ci sono molti errori nel tuo programma, a partire dall'inversione di argc e argv, dal tipo errato per argv, parentesi messe male, mfptr++ che non serve anzi è sbagliato, mancata allocazione della memoria, etc. etc.

Ecco una versione funzionante, a cui ho anche aggiunto un esempio in cui i dati letti vengono riutilizzati, per esempio semplicemente riscrivendoli:

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

struct lista {
    float numeri;
    struct lista *next;
};

int main(int argc, char *argv[]) {

    FILE *mfptr = NULL;
    struct lista head;
    struct lista *ptr = &head;
    ptr->next = NULL;

    printf("Lettura dei dati\n");

    if ((mfptr = fopen("numeri.txt", "r")) == NULL) {
        printf("impossibile aprire il file\n");
    } else {
        while (!feof(mfptr)) {
            ptr->next = malloc(sizeof (struct lista));
            ptr = ptr->next;
            fscanf(mfptr,"%f\n", &ptr->numeri);
            ptr->next = NULL;
            printf("%f\n", ptr->numeri);
        }
        fclose(mfptr);
    }

    printf("Elenco dei dati letti\n");

    ptr = &head;
    while (ptr->next) {
      printf("%f\n", ptr->next->numeri);
      ptr = ptr->next;
    }
}
coll. permanente

ha risposto 06 Jan '16, 16:13

enzotib's gravatar image

enzotib ♦♦
14.1k113187

modificato 06 Jan '16, 16:15

La tua risposta
abilita/disabilita anteprima

Segui questa domanda

Via email:

Una volta eseguito l'accesso potrai iscriverti a tutti gli aggiornamenti qui

Via RSS:

Risposte

Risposte e commenti

Basi di markdown

  • *corsivo* o __corsivo__
  • **grassetto** o __grassetto__
  • collegamento:[testo](http://url.com/ "titolo")
  • immagine?![alt testo](/path/img.jpg "titolo")
  • elenco numerato: 1. Foo 2. Bar
  • per aggiungere un'interruzione di riga, aggiungi due spazi a fine riga e premi «Invio»
  • è supportato anche semplice HTML

Tag:

×168
×45

domanda posta: 05 Jan '16, 20:06

domanda visualizzata: 7,732 volte

ultimo aggiornamento: 06 Jan '16, 16:15

Chiedi è un servizio di supporto gestito da Ubuntu-it. Contattaci!

powered by OSQAPostgreSQL database
Ubuntu e Canonical sono marchi registrati da Canonical Ltd.