Lettura da un file in c

SalvatCpo
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

// Scrivi un programma che legge e visualizza un numero da un file
int main() {
	int x;
	FILE *h;
	h = fopen ("h", "r");
	fscanf (h, "%d", &x);
	printf ("%d\n", x);
	system ("PAUSE");
	return 0;
}



Nella stessa cartella in cui si trova il file.cpp c'è un documento di testo chiamato h e contenente un numero
in prima riga, ma nonostante ciò, quando compilo, visualizzo sempre 0. Perché? Grazie :)

Risposte
SalvatCpo
Ok, grazie per la risposta. Il codice postato giù fa una lettura "multipla" e contemporaneamente una scrittura su un altro file. Quando eseguo, mi crea m ma me lo riempie di infiniti 0, nonostante in f ci siano (limitati) numeri (diversi da 0).
Il motivo per cui il programma non funziona è lo stesso per cui non funziona quello postato sopra oppure sbaglio qualcosa con la eof?


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

// Scrivi un programma contenente una funzione che legge tutti i numeri inseriti, uno per riga, in un file di 
// testo, e li scrive su un altro file raddoppiandoli.
void funzione (char nomefile[10]);
int main () {
	funzione ("f");
	system ("PAUSE");
	return 0;
}
void funzione (char nomefile[10]) {
	FILE *z;
	z = fopen (nomefile, "r");
	FILE *m;
	m = fopen("m.dat", "w");
	int l=0, b;
	do {
		fscanf (z, "%d\n", &l);
		b=2*l;
		fprintf (m, "%d\n", b);
		printf ("%d", l);
	} while (!feof(z));
}

SalvatCpo
Poi c'è quest'altro con la fseek e anche questo stampa solo zero.
Ma, a parte questo, è corretto? Cioè, se voglio posizionarmi e leggere da quella posizione, è così che si fa, cioè prima fseek e poi fscanf?

E se non mi posiziono, vuol dire che automaticamente il puntatore si posiziona all'inizio del file?

#include
#include
#include
#include

// Scrivi un programma che legge e visualizza un numero da un file in una certa posizione
int main() {
	int x;
	FILE *h;
	h = fopen ("h", "r");
	fseek (h, 2, SEEK_SET);
	fscanf (h, "%d", &x);	
        printf ("%d\n", x);
	system ("PAUSE");
	return 0;
}

SalvatCpo
Io sto preparando un esame (facoltà di fisica). La mia prof non tollera nemmeno se scrivo i=i+1 anziché i++.
Return 0 e System Pause lei ce li fa scrivere sempre.
Non so a cosa servano e non mi serve saperlo.
Quindi cerco di fare le cose seguendo le sue indicazioni.

Quello che mi preme sapere è se il codice con la eof e poi quello con la fseek sono concettualmente giusti e se, quando non si scrive la fseek, il posizionamento avviene automaticamente alla prima posizione.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.