Input/Output
-
ich habe jetzt folgendes gemacht.
mein programm in eine test.txt Datei geschrieben !!!
danach bin ich in xcode gegangen und folgendes gemacht
#include <iostream> #include <fstream> using namespace std; int main() { ifstream inputFile("test.txt"); int in; char c; inputFile>>in>>c; cout<<in<<c<<endl; return 0; }ich habe die text datei dort abgespeichert wo die main.cpp datei ist (siehe oben)
wenn ichs kompiliere passiert nichts: 0? kommt raus

was mache ich falsch ??????

-
Keine Ahnung, ich weiß ja nicht was in der Textdatei steht.
-
#include <iostream> #include <fstream> using namespace std; int main () { ifstream in ("input.txt"); if (in.bad()||in.fail()) { cout<< "Error"; return 0; } ofstream out ("output.txt"); while (!in.eof()) { int zahl; int t; int h; int z; int e; char neustart= 'y'; out<< "Geben Sie eine vierstellige Zahl ein: "; in>> zahl; t= zahl/1000; h= zahl/100%10; z= zahl/10%10; e= zahl%10; switch (t) { case 1: out<< "eins-";break; case 2: out<< "zwei-";break; case 3: out<< "drei-";break; case 4: out<< "vier-";break; case 5: out<< "fünf-";break; case 6: out<< "sechs-";break; case 7: out<< "sieben-";break; case 8: out<< "acht-";break; case 9: out<< "neun-";break; case 0: out<< "null-";break; } switch (h) { case 1: out<< "eins-";break; case 2: out<< "zwei-";break; case 3: out<< "drei-";break; case 4: out<< "vier-";break; case 5: out<< "fünf-";break; case 6: out<< "sechs-";break; case 7: out<< "sieben-";break; case 8: out<< "acht-";break; case 9: out<< "neun-";break; case 0: out<< "null-";break; } switch (z) { case 1: out<< "eins-";break; case 2: out<< "zwei-";break; case 3: out<< "drei-";break; case 4: out<< "vier-";break; case 5: out<< "fünf-";break; case 6: out<< "sechs-";break; case 7: out<< "sieben-";break; case 8: out<< "acht-";break; case 9: out<< "neun-";break; case 0: out<< "null-";break; } switch (e) { case 1: out<< "eins";break; case 2: out<< "zwei";break; case 3: out<< "drei";break; case 4: out<< "vier";break; case 5: out<< "fünf";break; case 6: out<< "sechs";break; case 7: out<< "sieben";break; case 8: out<< "acht";break; case 9: out<< "neun";break; case 0: out<< "null";break; } out<<endl; out<< "Um das Programm neuzustarten drücken Sie [y]. Zum beenden drücken Sie [n]"<<endl; in>>neustart; while (neustart !='n'); } return 0; }das

-
Hä, du willst mit einem C++-Programm eine Textdatei einlesen, in der ein C++-Programm steht. Und das willst du dann in einem char und in einem int speichern. Ja ne, is klar

Vielleicht erklärst du mir nochmal, was du genau erreichen willst?

-
Der Speicherort deiner main.cpp hat überhaupt nix damit zu tun, wo dein Programm nach Dateien guckt. Denk mal an die vielen Programmen von anderen Leuten, die du benutzt, deren Quellcode ist bei denen auf dem Rechner, trotzdem können die Dateien bei dir auf dem Rechner öffnen.
Wie genau das funktioniert ist systemabhängig, aber im allgemeinen wirst du so etwas wie ein Arbeitsverzeichnis haben, von dort aus werden relative Pfade (so wie deiner hier) interpretiert. Die Datei muss also im Arbeitsverzeichnis deines Programmes liegen (wo das wiederum ist, ist wieder davon abhängig, mit welchen System du das Programm wie startest. Bei vielen Konsolen ist es das Verzeichnis, in dem du gerade bist, wenn du das Programm startest). Alternativ kannst du aber auch einen absoluten Pfad angeben (wie das geht ist natürlich wieder systemabhängig).
P.S.: Dir ist schon klar, dass du versuchst, aus der Datei etwas zahlenartiges zu lesen? Wenn als erstes in der Datei keine Zahl steht, kann das natürlich nicht gelesen werden. Für genauere Analyse kannst du auch die Funktion is_open direkt nach dem Öffnen benutzen, sowie die verschiedenen Fehlerstatusflags des Streams vor und nach der Leseaktion ansehen.
P.P.S: Und da du von der Seuche befallen bist, versuche ich mal, dich zu heilen: endl fügt keinen Zeilenumbruch ein. '\n' ist ein Zeilenumbruch. endl ist ein Zeilenumbruch mit anschließendem flush! Es ist eher selten, dass man dies möchte.
-
die aufgabe ist: Gestalten Sie Ihr Programm so, dass der Input von einer Datei namens input.txt gelesen und der Output in eine Datei namens output.txt geschrieben wird.
auf unseren vo folien wird auch endline verwendet
(aber werde mir das für die zukunft merken)keine ahnung wo es hackt

-
Also das Einlesen geht so:
int main() { int zahl; // Einlesen: { ifstream in( "input.txt" ); in >> zahl; } }Die Textdatei schaut dann logischerweise so aus:
123
-
hmmm, kannst du vllt step by step sagen was ich machen muss

ich hab wirklich den faden verloren

-
Ich glaube, die wollen, dass du deine vierstellige Zahl aus input.txt rausholst und die Textausgabe nach output.txt schreibst.
Hattest du doch in deinem Originalen Programm schon ganz richtig, nur dass du die ganzen Nachfrageausgaben auch ins Textfile geschrieben hast.
Im input.txt steht deine vierstellige Zahl.
Die holst du dir über einen istream, wertest sie in deinem Programm aus und schreibst den Text nach output.txt per ostream. Die Nachfrage, ob du noch eine Zahl lesen willst, kannst du ja drinlassen, wenn du mehrere Zahlen (durch Leerzeichen oder \n getrennt) in der input.txt stehen hast.
-
genau das ist es !!!
nur es klappt iwie nicht, ich hab die vo Folie studiert und 1:1 übernommen, klappt nicht

-
so folgendes:
ich habe eine Input.txt erzeugt und 4 vierstellige zahlen eingetippt; diese datei in den Ordner gelegt wo meine main.cpp ist.
main.cpp schaut so aus:
#include <iostream> #include <fstream> #include <cstdlib> //für atoi using namespace std; int main () { ifstream iFile; iFile.open("input.txt"); string line= ""; //string ist wie character nur liest es nicht ein character sondern mehrere int zahl=0; int t; int h; int z; int e; if (iFile.is_open()) { while(!iFile.eof()) { //solange nicht end of file geht es durch getline(iFile, line, '\n'); //liest die Datei, speichert in line überschreibt es bei zeilenumbruch zahl = atoi(line.c_str()); //wird in integer umgewandelt und in der variable zahl eingespeichert t= zahl/1000; h= zahl/100%10; z= zahl/10%10; e= zahl%10; switch (t) { case 1: cout<< "eins-";break; case 2: cout<< "zwei-";break; case 3: cout<< "drei-";break; case 4: cout<< "vier-";break; case 5: cout<< "fünf-";break; case 6: cout<< "sechs-";break; case 7: cout<< "sieben-";break; case 8: cout<< "acht-";break; case 9: cout<< "neun-";break; case 0: cout<< "null-";break; } switch (h) { case 1: cout<< "eins-";break; case 2: cout<< "zwei-";break; case 3: cout<< "drei-";break; case 4: cout<< "vier-";break; case 5: cout<< "fünf-";break; case 6: cout<< "sechs-";break; case 7: cout<< "sieben-";break; case 8: cout<< "acht-";break; case 9: cout<< "neun-";break; case 0: cout<< "null-";break; } switch (z) { case 1: cout<< "eins-";break; case 2: cout<< "zwei-";break; case 3: cout<< "drei-";break; case 4: cout<< "vier-";break; case 5: cout<< "fünf-";break; case 6: cout<< "sechs-";break; case 7: cout<< "sieben-";break; case 8: cout<< "acht-";break; case 9: cout<< "neun-";break; case 0: cout<< "null-";break; } switch (e) { case 1: cout<< "eins";break; case 2: cout<< "zwei";break; case 3: cout<< "drei";break; case 4: cout<< "vier";break; case 5: cout<< "fünf";break; case 6: cout<< "sechs";break; case 7: cout<< "sieben";break; case 8: cout<< "acht";break; case 9: cout<< "neun";break; case 0: cout<< "null";break; } } } else { cout<<"Konnte input.txt nicht öffnen \n"; } iFile.close(); return 0; }nach dem kompilieren mit MAC kommt: konnte input nicht öffnen ???????
ich mach doch alles richtig, oder ist der mac bisschen gemein hier ?
-
diese datei in den Ordner gelegt wo meine main.cpp ist.
Schön, dass du den Thread so aufmerksam liest.

Ich habe dir doch schon erklärt, dass dein Programm die Datei wohl gerade deswegen nicht findet, warum das so ist und was du dagegen tun kannst.
-
tut mir leid ich meinte ich habe es NICHT in den selben Ordner getan
... trotzdem, wenn ich bei xcode auf run drücke geschieht nichts 
-
@neymar
Ist dir das Konzept des "aktuellen Verzeichnis" aka. "Arbeitsverzeichnis" bekannt?
-
ich weiß nicht genau, was du meinst ! aber erklär bitte !
-
Na, sicher nicht.
Das kannst du dir ergoogeln.
"current directory" wenn du des Englischen mächtig bist.
-
[quote="hustbaer"]Na, sicher nicht.
Das kannst du dir ergoogeln.
"current directory" wenn du des Englischen mächtig bist.[/quote]ist fast so hilfreich wie das erklären ^^, ich les das mal durch und dann schau ma weiter, danke
-
neymar schrieb:
ist fast so hilfreich wie das erklären ^^
ISt sogar noch viel hilfreicher - zeigt dir nämlich, wo du Antworten auf viele deiner Fragen selbständig finden kannst (nämlich bei Google). Dann brauchst du nicht bei jeder kleinen Frage warten bis du hier ne Antwort bekommst (und wir brauchen nicht loszutippen bei Fragen, die in kürzester Zeit im Netz zu finden sind).
-
meine eigentliche frage war es wie es auf dem mac geht !!!
mein programm funktioniert auf ubuntu mit g++ prima nur mit xcode nicht darum war die frage an mac user gerichtet !!ich habe es mitlerweile geschafft. man muss im xcode ein neues file öffnen und dann empty file öffnen, es als reinen txt abspeichern und full path angeben: sprich nicht iFIle("Input.txt") sondern iFile(home/blablabla/)
er kann jetzt vom input auslesen aber das erstellen eines outputs geht nicht

google spuckt auch nicht viel aus, alle tuts und videos auf youtube habe ich angeschaut und am programm kanns nicht liegen das funktioniert ja bei ubuntu
hmmm

-
"funktioniert nicht", ist eine herrlich elaborierte Fehlerbeschreibung, die allen hilft, dein Problem zu lösen.
Nicht.