C++ Datei auslesen

explorer

Well-Known Member
Ich weiß, ist ne ziemliche Noobfrage, aber es ist spät, und ich steh wirklich gerade auf dem Schlauch...
Hab das Problem schon ein paar mal gehabt, aber meine anderen Projekte sind weg, also kann ich leider nicht nachsehen.
Googeln für ne Stunde hat auch nur immer wieder den gleichen Fehler produziert.
Darum hoffe ich das jemand von euch meinen Denkfehler aufdecken kann... ;'(

Hier mein Problem:

Ich hab eine Datei , in der sind 9 Zeilen a 9 Zeichen.
Jetzt hab ich ein Integerarray ala "felder[9][9]", womit das Programm arbeitet.
Jetzt wollte ich das wie folgt füllen:
Code:
void einlesen()
{
	char buffer[9];
	cout<<"Einlesen..."<<endl;
	ifstream datei("zahlen.txt",ios::in);
	for(int i=0;i<=8;i++)
	{
		datei.getline((char *)buffer,9);
		for(int e=0;e<=8;e++)
		{
			feld[e][i]=atoi(buffer[e]);
		}
	}
	datei.close();
}

Jetzt bekomme ich aber immer die Fehlermeldung:
"invalid conversion from `char' to `const char*'"

Leider hab ich da irgend wie nen Denkfehler drin...
Bitte helft mir mal kurz auf die Sprünge.

mfg
explorer
 
mal ausprobiert das (char*) vor buffer in getline zu entfernen? und fuer welche zeile kommt die meldung?
 
Hmm
Ich versteh das nicht :ugly:
Problem besteht weiterhin:
Code:
#include <iostream>
#include <fstream.h>
#include <stdlib.h>
#include <stdio.h>
int feld[9][9];

void einlesen()
{
	char buffer[10];
	cout<<"Einlesen..."<<endl;
	ifstream datei("zahlen.txt",ios::in);
	for(int i=0;i<=8;i++)
	{
		datei.getline(buffer,9);
		for(int e=0;e<=8;e++)
		{
			feld[e][i]=atoi(buffer[e]);
		}
	}
	datei.close();
}

error: invalid conversion from `char' to `const char*'
 
Mit
Code:
feld[e][i]=atoi(&buffer[e]);
sollte es klappen. atoi() is naemlich ganz gierig auf einen const char*, ein char allein aber schmeckt ihm nicht besonders. Haengt damit zusammen, dass ein const char*, angezeigt durch den * ein Pointer ist, also quasi "nur" einer Speicheradresse, wohingegen ein char keine Speicheradresse ist, sondern eine "richtige" Variable, der man direkt Werte zuweisen kann. Und mit dem &-Operator bekommst Du dann die Speicheradresse Deines char raus und kannst sie an atoi() verfuettern.
 
Juhu!!!
Anderer Ansatz, und es geht!

Code:
void einlesen()
{
	char buffer[2];
	cout<<"Einlesen..."<<endl;
	FILE *datei;
	datei=fopen("zahlen.txt","r");	
	cout<<"datei geöffnet"<<endl;
	if(datei!=NULL)
	{
		for(int i=0;i<=8;i++)
		{
			for(int e=0;e<=8;e++)
			{
				feld[e][i]=atoi(fgets( buffer, sizeof( buffer ), datei ));
				cout<<"e:"<<e<<" i:"<<i<<" Wert:"<<feld[e][i]<<endl;
			}
		fgets( buffer,sizeof(buffer),datei); //Linebreak wegmachen
		}
	}
	else
	{
		printf("Konnte Datei nicht finden bzw. öffnen!\n");
	}
	fclose(datei);
}
 
explorer schrieb:
Hmm
Ich versteh das nicht :ugly:
Problem besteht weiterhin:

Weil der Fehler hier auftritt:

Code:
feld[e][i]=atoi(buffer[e]);

Warum? Keine Ahnung, hab von C++ nicht wirklich viel Ahnung, sorry.

Regards,

Case

Edit: Hoppla, zu spät. ;) k3rn3lpanic hat's ja gut erklärt.
 
wäre ein fscanf nicht leichter?

fscanf(file,"%i\n", &var);

habe es nicht probiert ist nur eine idee da es sich ja um ganzzahlen handelt
 
a) fscanf ist C und kein c++
b) sscanf ist das einzige scanf was man benutzen sollte nach einem fgets
 
datei=fopen("zahlen.txt","r"); und printf(); sind soviel ich weiss auch kein c++ sondern c

und was ist daran so schlimm auch c drin zu haben wo c++ eh viel aus c übernommen hat
 
Zurück
Oben