Datei lesen int und string sortieren

Thomasio hat gesagt.:
was ich versuche zu lernen ist erstmal C, aber mit zielrichtung C++ und später Win32
dazu hab ich mir 2 fette bücher zugelegt und einige dutzend tutorials im web gesucht, die sind zwar als einzelne meist nicht besonders, aber sie ergänzen sich ganz gut, so dass ich mir den sinn aus einer kombination verschiedener tutorials rausklauben kann
zu anfang bin ich da etwas querbeet rumgehüpft, ein wenig C, dann wieder C++ und auch n paar sachen in Win32, habe aber inzwischen begriffen, dass ich mit C anfangen und mich da erstmal durcharbeiten muss
Gut, das du das jetzt erkannt hast. Dieses rumgehopse bringt nämlich nichts außer das du ganz verwirrt bist - was bereits der Fall zu sein scheint ;). Entscheide dich einfach für eine Sprache und versuche damit klar zu kommen. C ist allerdings nicht wirklich toll dafür weil man alles zu Fuß machen muß.

Thomasio hat gesagt.:
installiert habe ich mir CODE::BLOCKS, der wurde mir mehrfach empfohlen, und schaut mir auch recht gut aus
drin enthalten ist gcc und mingw, also alles was ich brauche
MinGW ist ein angepasster GCC für Windows.

Thomasio hat gesagt.:
bis ich nu in einem meiner bücher auf diese übung gestossen bin, wo ich <sstream> brauche, was C:B aber nicht includen kann, zumindest hab ich nicht rausgefunden wie, bzw ich bekomme einen haufen fehlermeldungen
Der Header sstream ist Teil der C++ Standard Template Bibliothek. Was du bei C::B inkludieren kannst oder nicht hängt vom dem installierten Compiler ab. Wenn du da nur den C Compiler von MinGW installiert hast und nicht den C++ Compiler und die C++ Bibliothek / Header, dann kannst du es auch nicht einbinden. Genauso wenig funktioniert es wenn du nur den C Compiler aufrufst, z.B. wenn die Datei nicht als C++ Datei (mit der Endung .cpp) gespeichert hast.

Thomasio hat gesagt.:
darum hab ich dann versucht das ganze von der eingabeaufforderung zu machen
damit habe ich mal den ersten teil der übung gelöst, in dem es drum ging die datei anzulegen, lesen und schreiben, indem ich mir aus einem der tutorials rausgesucht habe, wie man das mit funktionen macht, die in <stdio> enthalten sind, nur der zweite teil funktioniert damit nicht mehr, weil <stdio> wohl keine funktion hat string nach int zu wandeln, sprich ich brauche nun doch <sstream>
also stehe ich da mit dem kurzen hemd
Nein. Es gibt in stdio verschiedene Funktionen um Strings zu konvertieren. (siehe hier: http://cppreference.com/stdstring/index.html) Die Funktion atoi solltest du allerdings nur verwenden wenn du bereits sichergestellt hast, das es sich dabei um eine Zahl handelt, da die Funktion nicht auf Fehler prüft und z.B. "1abasd" auch als Zahl interpretiert wird.

Sakr hat gesagt.:
C:
if(atoi(a[i]))
Diese Abfrage ist unsinnig, da im String durchaus ein Wert stehen könnte der 0 ergibt. Man kann mit atoi nicht auf Fehler prüfen sondern muß vorher erstmal feststellen ob der String als Zahl interpretiert werden kann. Oder man benutzt einfach sscanf:
C:
int x; 
const char* wert = "1234"; 

if (sscanf(wert, "%i", &x) == 1) ...
Gruß

Und warum schreibst du den Code als Zitat?

@Thomasio: Bitte halte dich an die Groß-/Kleinschreibung, siehe Netiquette Nr. 15.

Gruß
 
Verwirrung ist wohl das richtige Wort, ich versuche gerade zu vergessen was ich zu Anfang schon über Win32 gelesen hatte, damit es nicht noch schlimmer wird bevor ich mal die Grundlagen kenne

Ob nun C oder C++, mein Ziel ist ohnehin Win32, wie ich da hin komme ist mir im Prinzip egal, mir ist nur aufgefallen, dass die allermeisten Tutorials für C++ schon Kenntnisse in C voraussetzen, darum bin ich nach der anfänglichen Verwirrung sozusagen "back to the roots"

Der Header sstream ist Teil der C++ Standard Template Bibliothek. Was du bei C::B inkludieren kannst oder nicht hängt vom dem installierten Compiler ab. Wenn du da nur den C Compiler von MinGW installiert hast und nicht den C++ Compiler und die C++ Bibliothek / Header, dann kannst du es auch nicht einbinden. Genauso wenig funktioniert es wenn du nur den C Compiler aufrufst, z.B. wenn die Datei nicht als C++ Datei (mit der Endung .cpp) gespeichert hast.

Installiert habe ich ganz einfach das, was bei C::B auf der download Seite als letzte offizielle Release angeboten wird, wo gcc und mingw bereits enthalten ist (mit den "nightly builds" komme ich irgendwie nicht klar, wenn ich da versuche was zu installieren funktioniert hinterher gar nichts mehr)
Nach euren Tips hier habe ich gerade mal etwas herum experimentiert, was mein Problem evtl etwas deutlicher beschreibt:

Im Windows Editor einen mini Code geschrieben der praktisch nur <sstream> included, um zu sehen, ob es denn geht, dann in der Eingabeaufforderung direkt mingw aufgerufen ....... funktioniert, egal unter welchem Namen ich es speichere
In C::B eine neue Datei erstellt und den exakt gleichen Code reinkopiert ......... funktioniert nicht, egal ob ich es als .c oder .cpp speichere

mingw ist also wohl richtig installiert, nur dass in C::B irgendeine Einstellung nicht passt, oder woran sonst könnte es liegen?
 
naja als ich vor lange zeit fast das gleich problem hatte, hatte ich es mit atoi() gelöst und hat wunderbar geklappt.
aber die losung mit sscanf() ist viel besser :).

PS : ich bin neu bei der forum deswegen habe ich den code in zitat geschrieben.
 
Thomasio hat gesagt.:
Installiert habe ich ganz einfach das, was bei C::B auf der download Seite als letzte offizielle Release angeboten wird, wo gcc und mingw bereits enthalten ist (mit den "nightly builds" komme ich irgendwie nicht klar, wenn ich da versuche was zu installieren funktioniert hinterher gar nichts mehr)
Laut der C::B Seite sind in dem Standardpaket der C++ und C Compiler sowie die benötigten Pakete drin.

Thomasio hat gesagt.:
Im Windows Editor einen mini Code geschrieben der praktisch nur <sstream> included, um zu sehen, ob es denn geht, dann in der Eingabeaufforderung direkt mingw aufgerufen ....... funktioniert, egal unter welchem Namen ich es speichere
In C::B eine neue Datei erstellt und den exakt gleichen Code reinkopiert ......... funktioniert nicht, egal ob ich es als .c oder .cpp speichere
Du "beschreibst". Warum? Warum postest du nicht einfach den konkreten Code und den genauen Befehl den du benutzt hast um die Datei zu kompilieren? Was ist die Ausgabe des Compilers im Log Fenster? Das wäre doch viel einfacher und läßt keinen Raum zur Spekulation.

Thomasio hat gesagt.:
mingw ist also wohl richtig installiert, nur dass in C::B irgendeine Einstellung nicht passt, oder woran sonst könnte es liegen?
Also ich hab grad C::B mal installiert. Der folgende Code wird ohne Probleme kompiliert und gelinkt wenn ich auf Build->Compile Current file klicke:
C++:
#include <sstream>
#include <string>
#include <iostream>

int main() {
    std::istringstream istr("hello world");
    std::string s;
    while (istr >> s) {
        std::cout << s << std::endl;
    }
}
Hast du evtl. ein C Projekt statt eines C++ Projekts angelegt (falls du ein Projekt angelegt hast)?

Gruß
 
Ich sags ja, der einzige Depp im Lande der das Offensichtliche übersieht
Mit C++ source funktioniert es

danke an alle, ich melde mich in 1/2 Jahr wieder, wenn ich den Unterschied zwischen C und C++ begriffen habe
 
Zurück