sscanf - PROBLEME
-
Hi!
Ich schreibe für ein Studienprojekt eine Klasse, die Daten einer Textdatei einliest,dann teilweise mit "sscanf" in einem array speichert und schließlich ausgibt.
Leider treten immer wieder zwei Fehler auf!
Ganz große Bitte auf Hilfe!!!!
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;string readData()
{
//Daten werden eingelesen
fstream f;
char line[256]= {' '};
string daten= " ";
f.open("E:\\alte_Beispieldaten.txt", ios::in);if (f.is_open())
{while(!f.eof())
{
f.getline(line, sizeof(line));
daten+=line;
daten+="\n";}
f.close();
}
else
{
cout<<"Fehler beim Lesen der Datei";
}return daten;
}float Knoten10004 (string daten)
{int Berechnungsschritt = 300;
float k10004[Berechnungsschritt][6];
//Daten werden sortiert und mittels sscanf als float im array gesperichert
for (int n=1;n<=Berechnungsschritt;n++)
{
sscanf (daten ,"%f %f %f %f %f %f ",&k10004[n][0], &k10004[n][1],&k10004[n][2],&k10004[n][3],
&k10004[n][4],&k10004[n][5]);
daten.erase(n*256);}
return k10004[300][6];
}void ausgabe(float k10004[300][6])
{for (int n=0;n<300;n++)
{
for(int j=0;j<6;j++)
{
cout << k10004[n][j];
cout << "\t";
}
cout<<endl;
}}
int main()
{ausgabe(Knoten10004);
return 0;
}Die Fehlermeldungen:
|51|error: no matching function for call to `sscanf(std::string&, const char[18], float*, float*, float*, float*, float*, float*)'|
|79|error: cannot convert `float ()(std::string)' to `float ()[6]' for argument `1' to `void ausgabe(float (*)[6])'|
-
sscanf ist definiert als
int sscanf ( const char * str, const char * format, ...);
Warum sollte das als ersten Parameter eine Referenz auf einen std::string aufnehmen?
Lars
-
Ok. Dann brauche ich bitte Hilfe wie ich das Problem lösen kann!

-
sscanf(daten.c_str(), ...)sscanf ist nicht sehr fein, warum machst du es nicht mit Streams?
-
Streams? kenne ich leider nicht! Wie wird das verwendet?
mein c++ wissen beschränkt sich leider auf ein semester vorlesung, die auch schon länger her ist!
-
Du verwendest doch schon streams!
fstream f;Der einzige Unterschied ist jetzt, daß du keinen File-Stream sondern einen String-Stream benötigst:
#include <sstream> void Knoten10004(const string &daten) { istringstream istr(daten); float f1, f2; daten >> f1 >> f2; }Wobei ich jetzt gerade nochmal deinen Code angeschaut habe - du kannst einfach den File-Stream übergeben:
void readData() { if (f.is_open()) { Knoten10004(f); } } void Knoten10004(ifstream &iff) { float f1, f2; iff >> f1 >> f2; }P.S. Die Rückgabewerte bei deinen Funktionen machen bisher keinen Sinn (bzw. sind sogar falsch!), so daß ich sie einfach auf "void" geändert habe!
Aber schreib ersteinmal deinen Code um, und dann mach dir Gedanken über die richtige Übergabe von Parametern sowie Rückgabe von Funktionswerten...
-
polly schrieb:
Streams? kenne ich leider nicht! Wie wird das verwendet?
mein c++ wissen beschränkt sich leider auf ein semester vorlesung, die auch schon länger her ist!Streams sind zum Beispiel cout und cin die du ja offensichtlich kennst. cin ist ein std::istream und cout ist ein std::ostream. Es gibt auch einen Stream mit dem man Strings bearbeiten kann, der nennt sich std::stringstream und ist sowohl ein ostream als auch gleichzeitig ein istream. Das heißt, wenn du mit cin und cout umgehen kannst, kannst du automatisch auch mit stringstreams umgehen. Schön, oder?
eine Übersicht über die Hierarchie und eine Beschreibung aller Methoden mit Beispiel findest du hier:
http://www.cplusplus.com/reference/iostream/