Tabelle - Abfrage



  • Wüsste das wer ne Antwort oder könnte mir da wer weiterhelfen? Danke im Vorraus


  • Mod

    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"; } // 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;
    }

    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.


  • Mod

    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


  • Mod

    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.


  • Mod

    Nutze in Zukunft bitte die [cpp]-Tags! Guck mal beim Beitragerstellen unten links, unter den Smileys.

    Ich würde das ganz anders ansetzen, vector und getline scheinen mir die falschen Strukturen für dein Vorhaben zu sein. Für Nachschlagen von Einträgen bietet sich ein set an, für wortweises Einlesen der Operator>>.

    #include <iostream>
    #include <string>
    #include <fstream>
    #include <set>
    
    using namespace std;
    
    int main()
    {
      set<string> namen;
      {
        ifstream in("f.txt");
        for(string wort; in >> wort;)
          namen.insert(wort);
      }
      {
        for(string wort; cin >> wort;)
          if (namen.count(wort))
            cout << "Wort \"" << wort << "\" vorhanden.\n";
          else
            cout << "Wort \"" << wort << "\" nicht vorhanden.\n";
      }
    }
    


  • Jo, soweit hab ich erstmal alles. Vielen Dank miteinander!


Anmelden zum Antworten