Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    fscanf legge male gli interi C

    Ciao a tutti, è la prima volta che scrivo e come noterete sono all'inizio con la programmazione in C.
    E' da stamattina ke leggo le altre discussioni ma nn riesco a trovare nulla ke risolva il problema mi scuso in anticipo per una domanda così banale.
    Ho un file .odt , un normale file scritto con libreofficewriter di ubuntu, ho una riga con dei numeri interi ad esempio -5 0 1 ecc.
    Il file inizia proprio così nn ci sono altre righe prima.
    Devo semplicemente leggere gli interi e memorizzarli il problema è ke un semplice fscanf mi ritorna come risultato dei numeri assurdi.Ad esempio se gli faccio leggere solo il primo mi dà invece ke -5 il numero 1685382481.
    Vi scrivo il codice usato, tutto il resto del codice ke nn riguarda questa operazione ho già visto a parte ke funziona e mi serve per altre cose.Grazie

    #define MAX_ERR_LENGTH 80

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <regex.h>
    #include <sys/types.h>


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

    FILE *fil;
    char buffer[801];

    fil = fopen(argv[1], "r");
    if (fil == NULL){
    printf ("Errore in apertura del file\n");
    exit(1);
    }

    int i;
    int nodi=5;
    int hyp;
    int archi;
    int a,b,j;
    int k = 3;
    int dim = 25;
    int ricorda = 0;
    int*coeffs = calloc (dim+1, sizeof(int));

    int x;

    rewind(fil);
    fscanf(fil, "%d", &x);
    printf("%d", x);
    }





    tutti dicono ke funziona, tutte le guide in C dicono ke devo usare questo comando, allora ke succede dov'è l'errore????
    Sto impazzendo!!!!!!!!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Beh, anche per me funziona ... magari fai la prova a "ripulire" il codice

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    int main (int argc, char **argv)
    {
    	int x;
    	FILE *fil;
    
    	fil = fopen(argv[1], "r");
    	if (fil == NULL)
    	{
    		printf ("Errore in apertura del file\n");
    		exit(1);
    	}
    	
    	fscanf(fil, "%d", &x);
    	printf("%d", x);
    
    	return 0;
    }
    e a controllare il file di testo che stai leggendo ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Ciao grazie per aver risposto così velocemente.
    Allora se scrivo un nuovo programma con le righe da te selezionate mi dà cmq lo stesso tipo di errore cioè mi stampa un numero enorme anche se questa volta diverso da quello da prima.
    Il file con i dati l'ho scritto in maniera semplicissima proprio per provare, magari devo cambiare formato del file? con quale editor dovrei scriverlo?
    Grazie

  4. #4
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Non è così semplice la cosa, il problema è che il file odt ha un formato suo, dovresti studiarti la documentazione fornita da libre office.
    Probabilmente per rappresentare un intero non usano solo i byte che sono richiesti per rappresentare un intero in C, visto che ci sono anche informazioni sulle dimensioni e sul colore dei caratteri.
    Vedi questa discussione di stack overflow.

  5. #5
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Originariamente inviato da deasteff
    Il file con i dati l'ho scritto in maniera semplicissima proprio per provare, magari devo cambiare formato del file? con quale editor dovrei scriverlo?
    Grazie
    Con gedit/notepad/TextEdit in formato plain text.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Originariamente inviato da deasteff
    Il file con i dati l'ho scritto in maniera semplicissima proprio per provare
    Grazie
    Usa il formato testo e controlla che sia effettivamente un semplice testo.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Mio Dio!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    Hai ragione, ho provato a scrivere un semplicissimo file con xemacs e funziona perfettamente!!!
    Non potete capire quanto tempo ho perso, ore e ore a leggere forum e pagine web e guide in C sull'argomento fscanf.
    Non so come ringraziarvi non ci sarei mai arrivata da sola.
    Un grazie infinito ragazzi.

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.