[c] formatierter Text einlesen - Problem

piranha

Grünschnabel
Hallöle,

Ich habe ein Problem dass der formatierte Text nicht richtig eingelesen wird und an eine struct übergeben wird.
Bin schon seit ein paar Stunden am Internet durchforsten aber bislang noch ohne erfolg

Der wichtige Codeblock
Code:
// Einlesen der Datei und in Struktur übergeben
int read_book()
{
	int i = 0;	
	FILE *datei;
	struct buch b[BOOK_MAX];
	
	// Datei von Datenbank auswählen	
	datei = fopen("int.txt","r");
	
	if(datei == NULL) {
		// -> Fehler ausgeben
	} else {
		
		// Datenbank auslesen und in Struktur übergeben
		while(!feof(datei))
		{
			
			fscanf(datei,"%d\t%s\t%s\t%s", &b[i].id, &b[i].name, &b[i].text, &b[i].zutaten);
			printf("[%d] ID: %d\t NAME: %s\t TEXT: %s\t ZUTAT: %s\n",i,b[i].id, &b[i].name, &b[i].text, &b[i].zutaten);
			i++;
		}
		fclose(datei);
	}
	
	return 0;
}

Der formatierte Text:
Code:
1	Test		Huhu	Nana
2	Testy	Haha	Nua

Die Ausgabe:
Code:
[0] ID: 1	 NAME: THNana	 TEXT: HNana	 ZUTAT: Nana
[1] ID: 2	 NAME: THNua	 TEXT: HNua	 ZUTAT: Nua

Wie man sieht stimmt nur das erste und das letzte überein.

Bin für Hilfe sehr dankbar.
Viele Grüße
Michael
 
Hallo Matthias,

Danke für deine schnelle Antwort :)

Code:
struct buch
{
	int id;
	char name;
	char text;
	char zutaten;
};
 
Code:
struct buch
{
	int id;
	char name;
	char text;
	char zutaten;
};
So kann das nicht funktionieren. Ein char kann nur ein einziges Zeichen aufnehmen, du versuchst allerdings eine komplette Zeichenkette darin zu speichern. Du musst entweder ein char-Array verwenden oder einen Zeiger auf char (den du dann vor dem Einlesen mit der Adresse eines mit malloc reservierten Speicherblocks füllst).

Grüße,
Matthias
 
Du könnest es aber auch mit STRING versuchen...
Code:
struct buch {
int id;
string name;
string text;
string zutaten;
}
Dafür musst du aber die string lib includieren:
Code:
#include <string>
;)
Hoffe ich konnte helfen,
Daniel :D
 
Oh, darauf hatte ich gar nicht mehr geachtet, ist mir jetzt peinlich... vielen vielen Dank :)

Das mit den Strings kann ich auch versuchen, da ich die später wohl eh in einen String umwandeln muss, auch dir danke ;)
 
Ja sorry... hatte vergessen
Code:
 using namespace std;
zu schreiben ;)
Du hast recht ;)
Außerdem hab ich ja dazugeschrieben das er string includieren muss...
 
Zurück