fscanf probleme

Slazer

Mitglied
hallo, ich möchte aus einer textdatei zwei werte auslesen. aber egal was ich reinschreib es kommt nur schund raus, habe keine ahnung wo mein fehler liegt.
bitte schaut euch mal den quellcode an
Code:
#include <stdio.h>
#include <stdlib.h>

int main() {
	char datei[] = "pm.txt";
	int width, height;

	////////////////////////
	// Einlesen der Daten //
	////////////////////////
 	FILE *file = fopen(datei, "r");
	if(!file)
	{
		printf("%s konnte nicht geöffnet werden\n", datei);
		system("PAUSE");
		return 1;
	}
	if(fscanf(file, "width:%i\n", &width) == EOF)
	{
		printf("Breite konnte nicht ermittelt werden\n");
		system("PAUSE");
		return 1;
	}
	printf("width = %i\n", width);
	if(fscanf(file, "height:%i\n", &height) == EOF)
	{
		printf("Hoehe konnte nicht eingelesen werden\n");
		system("PAUSE");
		return 1;
	}
	printf("height = %i\n", height);
	
	fclose(file);
	system("PAUSE");
}
 
ich fürchte du kannst so komplexe Sachen nicht einlesen:
fscanf(file, "width:%i\n", &width)

in der Datei sollte nur Breite und Höhe drinstehe als Zahlen kein Text herum, d.h.
fscanf(file, "%i\n", &width)

untersuche mal den Rückgabewert von fscanf , der gibt ja eventuell auch nukk aus wenn er das Format nicht auflösen konnte

Vielleicht musst du zusätzlich die Datei im Textmode auswerten ?
 
es geht schon so!
wenn ich eintipp "width:5\n"
liest er es korrekt ein
aber wenn ich "dfsdtg" eingeb
wird auch ein wert eingelesen, der halt völlig falsch ist, und des dürfte ja eigentlich net sein!
 
aber dann gibt doch fscanf als Rückgabewert 0 zurück , oder etwa nicht ?

setze doch mal
int width=-1, height = -1;
und schaue ob sich die Werte immer noch verändern
 
hi,
danke es funktioniert.
ich will aber noch weitere daten einlesen, es liest dort aber immer nur die erst zeile ein.
Code:
struct reihae
    {   
    	int count;
    	int *vars;
    };

verti = calloc(height, sizeof(struct reihae));
	horiz = calloc(width, sizeof(struct reihae));	

	for(i = 0;i < height; i++)
	{
        strcpy(reihe, "");
        fscanf(file, "w:%s/n", reihe);
		if(strcmp(reihe, "") == 0)
		{
			printf("Fehler beim Einlesen der Daten\n");
			system("PAUSE");
			return 1;
		}
		printf("%s\n", reihe);
		first = 1;
 		token = strtok(reihe, "|" );
		while( token != NULL )
		{
			if(first)
			{
			    verti[i].count = 1;
				verti[i].vars = (int *) calloc( 1, sizeof(int));
				verti[i].vars[0] = 0;
				sscanf(token, "%d", &verti[i].vars[0]);
				if(verti[i].vars[0] == 0)
				{
				    printf("Fehler beim einlesen der Felder");
				    system("PAUSE");
				    return 1;
				}				    
				first = 0;
			}
			else
			{
			    verti[i].vars = (int *) realloc(verti[i].vars, (verti[i].count + 1) * sizeof(int));
			    verti[i].vars[verti[i].count] = 0;
				sscanf(token, "%d", &verti[i].vars[verti[i].count]);
				if(verti[i].vars[verti[i].count] == 0)
				{
				    printf("Fehler beim einlesen der Felder");
				    system("PAUSE");
				    return 1;
				}
				verti[i].count++;
			}
			printf("\t%d\n", verti[i].vars[verti[i].count - 1]);
			token = strtok( NULL, "|" );
		}
		printf("%d\n", verti[i].count);
	}
die daten sind im format "w:3|4|4\n" gespeichert jede zeile soll gesplittet werden und die einzelnen variablen (3, 4 und 4) in einer struktur gespeichert werden

wenn ich mehrere zeilen hab liest es wie schon gesagt immer nur die erste ein, dann kommt der fehler "Fehler beim einlesen der Daten"
sry der code is lang aber ich weis nicht weiter.
 

Neue Beiträge

Zurück