Tabelle - Abfrage
-
Hi,
ich versuche seit Tagen etwas zu erstellen:
einen Text eingeben, dann diesen abzuspeichern. das geht ja EINFACH:
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <ostream>
using namespace std;#define BUFFER_IS_NEWLINE ((buffer[1]=='\n') || (buffer[1]=='\r'))
void zeigeDateiinhalt (FILE *dateizeiger)
{
char buffer[80] = "";printf ("Bisheriger Dateiinhalt:\n\n");
while ( fgets(buffer,80,dateizeiger) != NULL )
fputs (buffer, stdout); /* Ausgabe nach stdout */
}void refrain() {cout << "Sim sa la dim, bam ba,\n";
cout << "Sa la du, sa la dim -\n"; } // PROGLEMvoid TextSpeichern (FILE *dateizeiger)
{
char buffer[800] = "";
int erg = 10;printf ("\n Bitte Enter, dann Text eingeben. Ende mit (Punkt) und Enter.\n\n");
while ( erg != EOF )
{
fgets (buffer, 80, stdin); /* von der Tastatur lesen (stdin) */if ( (buffer[0]=='.') && BUFFER_IS_NEWLINE ) /* Punkt eingegeben, Ende */
return;erg = fputs (buffer, dateizeiger);* in die Datei schreiben */
}
}void Bibilothek (FILE *dateizeiger)
{
char buffer[800] = "";
int erg = 10;
printf ("\n Bitte Enter, dann Text eingeben. Ende mit (Punkt) und Enter.\n\n");while ( erg != EOF )
{fgets (buffer, 80, stdin); /* von der Tastatur lesen (stdin) */
if ( (buffer[0]=='.') && BUFFER_IS_NEWLINE ) /* Punkt eingegeben, Ende */
return;erg = fputs (buffer, dateizeiger);
/* in die Datei schreiben */
}}
int main()
{
FILE *dateizeiger;
const char DATEINAME[] = "testoutput.h";/* Versuchen, die Datei mit r+ zum Lesen und Schreiben zu oeffnen */
dateizeiger = fopen (DATEINAME, "r+");if (dateizeiger == NULL) /* dann zum Schreiben oeffnen (neu anlegen) */
{
dateizeiger = fopen (DATEINAME, "w");if (dateizeiger == NULL)
{
fputs ("Fehler: Datei konnte nicht geoeffnet werden!\n", stderr);
return EXIT_FAILURE;
}
}/* bisherigen Text ausgeben */
zeigeDateiinhalt(dateizeiger);/* Text von der Tastatur einlesen und in die Datei schreiben */
TextSpeichern(dateizeiger);fclose (dateizeiger);
return EXIT_SUCCESS;
}NUR wie kriege ich den "REFRAIN" da rein? Dass hinter jedem Satz, den ich abspeichere, der Refrain steht im Archiv??? Und auch abgespeichert wird?
Vielen Dank im vorraus
-
Versuche den Quelltext mal formatiert:
#include "stdafx.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #include <iostream> #include <ostream> using namespace std; #define BUFFER_IS_NEWLINE ((buffer[1]=='\n') || (buffer[1]=='\r')) void zeigeDateiinhalt (FILE *dateizeiger) { char buffer[80] = ""; printf ("Bisheriger Dateiinhalt:\n\n"); while ( fgets(buffer,80,dateizeiger) != NULL ) fputs (buffer, stdout); /* Ausgabe nach stdout */ } void refrain() { cout << "Sim sa la dim, bam ba,\n"; cout << "Sa la du, sa la dim -\n"; } // PROGLEM void TextSpeichern (FILE *dateizeiger) { char buffer[800] = ""; int erg = 10; printf ("\n Bitte Enter, dann Text eingeben. Ende mit (Punkt) und Enter.\n\n"); while ( erg != EOF ) { fgets (buffer, 80, stdin); /* von der Tastatur lesen (stdin) */ if ( (buffer[0]=='.') && BUFFER_IS_NEWLINE ) /* Punkt eingegeben, Ende */ return; erg = fputs (buffer, dateizeiger); * in die Datei schreiben */ } } void Bibilothek (FILE *dateizeiger) { char buffer[800] = ""; int erg = 10; printf ("\n Bitte Enter, dann Text eingeben. Ende mit (Punkt) und Enter.\n\n"); while ( erg != EOF ) { fgets (buffer, 80, stdin); /* von der Tastatur lesen (stdin) */ if ( (buffer[0]=='.') && BUFFER_IS_NEWLINE ) /* Punkt eingegeben, Ende */ return; erg = fputs (buffer, dateizeiger); /* in die Datei schreiben */ } } int main() { FILE *dateizeiger; const char DATEINAME[] = "testoutput.h"; /* Versuchen, die Datei mit r+ zum Lesen und Schreiben zu oeffnen */ dateizeiger = fopen (DATEINAME, "r+"); if (dateizeiger == NULL) /* dann zum Schreiben oeffnen (neu anlegen) */ { dateizeiger = fopen (DATEINAME, "w"); if (dateizeiger == NULL) { fputs ("Fehler: Datei konnte nicht geoeffnet werden!\n", stderr); return EXIT_FAILURE; } } /* bisherigen Text ausgeben */ zeigeDateiinhalt(dateizeiger); /* Text von der Tastatur einlesen und in die Datei schreiben */ TextSpeichern(dateizeiger); fclose (dateizeiger); return EXIT_SUCCESS; }Willst du C oder C++ programmieren? Wenn C++, dann nutze mehr davon

Zeile 77 mit 81 versteh ich nicht

Eine in dem Zusammenhang unübliche Dateiendung: "testoutput.h" -> sollte die Funktion aber nicht beeinflussen.
So - time out
MfG f.-th.
-
willst du in c oder c++ programmieren? das was du da geschrieben hast, ist reines c. wenn du es in c++ machen willst, benutzte doch die streams, dann ist alles viel einfacher. hier ein kleiens beispiel:
#include <iostream> #include <string> #include <fstream> using namesapce std; int main() { ofstream out("name der datei"); string s; cin >> s; // Text einlesen out << s; // text in datei schreiben }so als beispiel. was du jetzt mit refrain und so gemeint hast, hab ich leider nicht so ganz verstanden.
und benutz mal die foren suche, es gibt endlos viele beispiele hier, wie man eine datei einlesen kann.vario-500
-
Ja, nur bringt mir das leider alles nicht viel.
Ich muss verknüpfungen machen. Wenn ich beispielsweise ne Namen eingeben, will ich wissen ob der schon gespeichert ist oder nicht. Und zusätzlich noch ne adresse, also verknüpfungen zwischen Name und Adresse. Doch find NICHTS!
-
so, deine datei muss ja ein bestimmtes format haben. ich benutzte hier mal ein beispielhaftes
Tom Peter Lucas foo bardas ist deine datei. jetzt liest du diese in einen vector ein und schaust dann, ob der name schon vorhanden ist:
#include <iostream> #include <string> #include <fstream> #include <vector> #include <algorithm> using namespace std; int main() { ifstream in("name der datei"); vector<string> namen; string s; while(in >> s) // liest die namen in einen vector ein { namen.push_back(s); } string name; cin >> name; // namen einlesen, der zu prüfen ist if(if(std::find(namen.begin(), namen.end(), name) != namen.end())) { cout << "name vorhanden\n"; } else { cout << "name nicht vorhanden\n"; } }so wenn das immer noch nicht das ist, was du willst, dann weiß ich auch nicht ^^
mit der andresse musst du das ähnlich machen und schau dir mal ein geignetes grundlagenbuch an, da wird nämlich so was alles erklärt
vario-500Edit: if abfrage, danke an Incocnito

-
Danke,
nur kommt durchgehend bei mir: error C2039: 'find': Ist kein Element von 'std::vector<_Ty>'
-
und error C2181: Ungültiges 'else' ohne zugehöriges 'if
-
Es muss heißen
if(std::find(namen.begin(), namen.end(), name) != namen.end())
-
Jo, klappt, vielen DANK!
-
Allerdings hätte ich da noch ne wichtige Kleine Frage:
Wie kriege ich beispielsweise das "sim sala bim", der "Refrain"(einfach so genannt!) da rein, bei dem Beispiel ganz am Anfang??? Das wär super, wenn mir da noch wer bei helfen könnte. Direkt bei der ersten Aufgabe.
-
Meinst du jetzt einfach Elemente mit Leerzeichen drin?
Dann benutzt man einfach std::getline:#include <iostream> #include <string> #include <fstream> #include <vector> #include <algorithm> using namespace std; int main() { ifstream in("f.txt"); vector<string> namen; string s; while(getline(in, s)) // liest die namen in einen vector ein namen.push_back(s); string name; getline(cin, name); // namen einlesen, der zu prüfen ist if(find(namen.begin(), namen.end(), name) != namen.end()) cout << "name vorhanden\n"; else cout << "name nicht vorhanden\n"; }
-
Nein, bei meinem allerersten Beitrag steht doch ganz oben
void refrain()
{
cout << "Sim sa la dim, bam ba,\n";
cout << "Sa la du, sa la dim -\n";
} // PROGLEMUnd das soll an jeden Text, den ich eingeben, angehängt werden UND gespeichert werden. Anhängen ist einfach, nur schaff ich es nicht, den Anhang Sim Sala Bim... auch zu speichern!
-
Wüsste das wer ne Antwort oder könnte mir da wer weiterhelfen? Danke im Vorraus
-
Sag bitte nochmal ganz klar, was du erreichen möchtest. Ich mag mir das nicht aus drei verschiedenen Beiträgen zusammenraten. Sag ganz genau, was du hast und erklär ganz genau, was du möchtest.
Und geh auch bitte mal auf die Sprachfrage ein. In deinem Eingangsbeitrag schreibst du reines C (bis auf ein paar C++-Verunreinigungen), dir werden dir hier aber C++-Lösungen gegeben, die du gar nicht verstehen kannst, wenn du von C kommst. Was soll es nun sein?
-
http://de.wikipedia.org/wiki/Auf_einem_Baum_ein_Kuckuck

Denke schon das das so ähnlich werden soll

-
Also, die .cpp lautet:
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <ostream>
using namespace std;#define BUFFER_IS_NEWLINE ((buffer[1]=='\n') || (buffer[1]=='\r'))
void zeigeDateiinhalt (FILE *dateizeiger)
{
char buffer[80] = "";printf ("Bisheriger Dateiinhalt:\n\n");
while ( fgets(buffer,80,dateizeiger) != NULL )
fputs (buffer, stdout); /* Ausgabe nach stdout */
}void refrain() {cout << "Sim sa la dim, bam ba,\n";
cout << "Sa la du, sa la dim -\n"; } // PROGLEMvoid TextSpeichern (FILE *dateizeiger)
{
char buffer[800] = "";
int erg = 10;printf ("\n Bitte Enter, dann Text eingeben. Ende mit (Punkt) und Enter.\n\n");
while ( erg != EOF )
{
fgets (buffer, 80, stdin); /* von der Tastatur lesen (stdin) */if ( (buffer[0]=='.') && BUFFER_IS_NEWLINE ) /* Punkt eingegeben, Ende */
return;erg = fputs (buffer, dateizeiger);* in die Datei schreiben */
}
}void Bibilothek (FILE *dateizeiger)
{
char buffer[800] = "";
int erg = 10;
printf ("\n Bitte Enter, dann Text eingeben. Ende mit (Punkt) und Enter.\n\n");while ( erg != EOF )
{fgets (buffer, 80, stdin); /* von der Tastatur lesen (stdin) */
if ( (buffer[0]=='.') && BUFFER_IS_NEWLINE ) /* Punkt eingegeben, Ende */
return;erg = fputs (buffer, dateizeiger);
/* in die Datei schreiben */
}}
int main()
{
FILE *dateizeiger;
const char DATEINAME[] = "testoutput.h";/* Versuchen, die Datei mit r+ zum Lesen und Schreiben zu oeffnen */
dateizeiger = fopen (DATEINAME, "r+");if (dateizeiger == NULL) /* dann zum Schreiben oeffnen (neu anlegen) */
{
dateizeiger = fopen (DATEINAME, "w");if (dateizeiger == NULL)
{
fputs ("Fehler: Datei konnte nicht geoeffnet werden!\n", stderr);
return EXIT_FAILURE;
}
}/* bisherigen Text ausgeben */
zeigeDateiinhalt(dateizeiger);/* Text von der Tastatur einlesen und in die Datei schreiben */
TextSpeichern(dateizeiger);fclose (dateizeiger);
return EXIT_SUCCESS;
}Ich habe beispielsweise
void refrain() {cout << "Sim sa la dim, bam ba,\n";
cout << "Sa la du, sa la dim -\n"; }
und möchte das gleichzeitig mit dem jeweils Eingegebenen Text abspeichern!Beispielsweise
Ich speichere ab wie oben unter "testoutput.h". Wenn ich die Datei ausführe kommt:
Bitte Enter, dann Text eingeben. Ende mit (Punkt) und Enter.
Dann der Text bla bla bla.
Und dieser MUSS zusammen mit dem Refrain "Sim sa la dim, bbb" abgespeichert werden unter testoutput.h! Nur das schaffe ich nicht!Bei JEDER Ausführung der Datei soll er das Refrain() als "Anhang" mit abspeichern. Dass er den "Refrain" anzeigt klappt. Nur speichert er nur das, was ich beim jeweiligen Ausführen geschrieben habe, er speichert nicht den "Refrain" mit ab.
-
Komische Aufgabe. Sicher, dass du dich richtig ausgedrückt hast?
#include <iostream> #include <fstream> #include <string> using namespace std; int main() { { ifstream in("testoutput.h"); cout << "Bisheriger Inhalt:\n"; if (in) cout << in.rdbuf(); } { cout << "\nNeue Zeile?\n"; string new_line; getline(cin, new_line); ofstream out("testoutput.h", ios::app); out << new_line << "\nSim sa la dim, bam ba,\nSa la du, sa la dim -\n"; } }edit: Ach, du willst noch "Punkt und Enter" als Ende. Kommt gleich.
edit2: Da:{ cout << "\nNeue Zeile? (Ende mit Punkt und Zeilenumbruch)\n"; ofstream out("testoutput.h", ios::app); for (string new_line; getline(cin, new_line);) { out << new_line; if (new_line.size() and new_line[new_line.size() - 1] == '.') break; } out << "\nSim sa la dim, bam ba,\nSa la du, sa la dim -\n"; }Und jetzt sag: Verstehst du davon auch nur irgendetwas oder bist du einfach nur froh, dass dir jemand die Hausaufgaben gemacht hat?
-
1. es sind keine Hausaufgaben. Ich mache selber nur so ein Paar Dinge!
2. Ich studiere Mathematik
3. Ab kommenden Semester gibts als Nebenkurs Informatik, mit C++!!!
4. Bringt mir dieser Vorschlag gerade nicht wirklich was.Ich muss wie eben gesagt vorgehen. Er muss mir den bisherigen Text anzeigen, dann muss ich Sätze eingeben und er muss suchen ob es diese gibt und falls nicht hinzufügen!!! Und das klappt ja bisher. Nur klappt es nicht, wenn er die Texte hinzufügt automatisch das "sim sala bim" hinzuzufügen!
MfG
-
judoe007007 schrieb:
Ich muss wie eben gesagt vorgehen. Er muss mir den bisherigen Text anzeigen, dann muss ich Sätze eingeben und er muss suchen ob es diese gibt und falls nicht hinzufügen!!!
Das klang in deiner Beschreibung aber ganz ganz anders:
Ich habe beispielsweise
void refrain() {cout << "Sim sa la dim, bam ba,\n";
cout << "Sa la du, sa la dim -\n"; }
und möchte das gleichzeitig mit dem jeweils Eingegebenen Text abspeichern!Beispielsweise
Ich speichere ab wie oben unter "testoutput.h". Wenn ich die Datei ausführe kommt:
Bitte Enter, dann Text eingeben. Ende mit (Punkt) und Enter.
Dann der Text bla bla bla.
Und dieser MUSS zusammen mit dem Refrain "Sim sa la dim, bbb" abgespeichert werden unter testoutput.h! Nur das schaffe ich nicht!Bei JEDER Ausführung der Datei soll er das Refrain() als "Anhang" mit abspeichern. Dass er den "Refrain" anzeigt klappt. Nur speichert er nur das, was ich beim jeweiligen Ausführen geschrieben habe, er speichert nicht den "Refrain" mit ab.
Wenn du dein Problem mnicht einmal richtig beschreiben kannst, wie soll man dir dann helfen können?
-
Also das mit Refrain hab ich jetzt gelöst.
Danke der Bemühung!!!Aber das Überprüfen klappt nicht ganz recht!
#include <iostream>
#include <string>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;int main()
{
ifstream in("f.txt");
vector<string> namen;
string s;
while(getline(in, s)) // liest die namen in einen vector ein
namen.push_back(s);string name;
getline(cin, name); // namen einlesen, der zu prüfen ist
if(find(namen.begin(), namen.end(), name) != namen.end())
cout << "name vorhanden\n";
else
cout << "name nicht vorhanden\n";
}PROBLEM: Er sucht nur nach dem ersten Wort ab. Sobald er das erste Wort kennt bricht er ab und sagt "name vorhanden"! Den Rest des Satzes beachtet er nicht!
Er muss aber suchen ob JEDES Wort aus dem Satz vorhanden ist! Und falls ein Wort aus einem x beliebigen Satz unbekannt ist, soll er sagen "name nicht vorhanden" und nach diesem unbekannten Wort fragen!
Wie kriege ich das hin.
-
Nachdem schon ein paarmal darauf hingewiesen wurde, schreib ichs jetzt mal im Fettdruck: Bitte nutze die Code-Tags, um deinen Code formatiert anzuzeigen!
Ansonsten sei auf den Link in meiner Signatur hingewiesen.