Eingabe Zeichenweise einlesen mit getchar... <stdio.h>



  • Hallo zusammen,

    ich hoffe ich bin hier im richtigen Teil des Forums gelandet. Kurze Vorabinfo: Bin Fahrzeugtechnik-Student und habe (ich würde mittlerweile LEIDER sagen) für ein Semester das Fach Informatik, in dem wir uns mit C++ beschäftigen. Für mich bisher absolut böhmische Dörfer. Es geht hier also nicht darum, mir irgendwelche Hausaufgaben zu lösen 😉

    Zu meiner Aufgabenstellung:
    Schreiben Sie ein Programm, das eine Eingabe von der Tastatur zeichenweise einliest. Benutzen Sie dafür die getchar Funktion. Die Eingabe soll durch Strg-Z abgebrochen werden können. Der eingelesene Text soll daraufhin untersucht werden, wie oft jedes der Zeichen "3","7","a" und "B" auftritt. Benutzen Sie eine dafür passende Kontrollstruktur. Geben Sie die Ergebnisse für Ihre Zählung aus.

    Wir haben bisher auschliesslich mit stdio.h gearbeitet, daher wäre es nett, wenn sich potentielle Helfer darauf beschränken könnten.

    Zuerst: Welche Kontrollstruktur soll ich anwenden? For und Switch?
    Ich raffs einfach nicht.

    Bitte auch kurze Erklärungen angeben, damit ich da versuchen kann, durchzublicken 😃

    Ich hoffe, mir kann geholfen werden!
    Danke vorab & Gruß,
    Tuelle

    P.S. Wer mir einigermassen günstig im Raum Köln Nachhilfe anbieten will, bin für Angebote offen! 🙂

    Edit: Falls jemand behaupten würde, ich wäre faul 🙂 , dem ist nicht so. Ich sitze schon seit mehreren Stunden vor div. Tutorials, meinem C++ Nachschlagewerk sowie dem Skript, und dennoch erschliesst sich mir nicht, wie ich die Aufgabe zu bewältigen hab... Traurig!


  • Mod

    Tuelle schrieb:

    Wir haben bisher auschliesslich mit stdio.h gearbeitet, daher wäre es nett, wenn sich potentielle Helfer darauf beschränken könnten.

    Das ist...ungewöhnlich. Entweder macht ihr kein C++ sondern C oder euer Kurs ist schlecht. Ich kann dir bei den Funktionen aus stdio.h nicht helfen. Wenn du was nützliches für C++ lernen willst, solltest du dir mal iostream angucken, da kann man dir auch sicherlich besser helfen.

    Zuerst: Welche Kontrollstruktur soll ich anwenden? For und Switch?
    Ich raffs einfach nicht.

    Nun, schauen wir die Aufgabe doch mal an:

    Schreiben Sie ein Programm, das eine Eingabe von der Tastatur zeichenweise einliest. Benutzen Sie dafür die getchar Funktion. Die Eingabe soll durch Strg-Z abgebrochen werden können.

    Aha, wir sollen also so lange einlesen, bis ein bestimmtes Ereignis eintritt. Wir haben es also mit einem Fall von "Solange ... bis ..." zu tun. Welche Kontrollstruktur passt da wohl am ehesten? Kleiner Tipp: Die for Schleife kann man eher als "von ... bis ..." umschreiben.

    Dann geht die Aufgabe weiter:

    Der eingelesene Text soll daraufhin untersucht werden, wie oft jedes der Zeichen "3","7","a" und "B" auftritt.

    Hier sollen wir auf eine bestimmte Menge von Ereignissen reagieren. Ja, switch ist da ein passendes Mittel.



  • Hallo Sepp,

    schön, dass so schnell jemand auf meine Anfrage reagiert!

    Also die Sache mit dem iostream habe ich jetzt auch schon mehrfach beim durchsuchen des Internets gefunden, die helfen mir nur leider derzeit nicht weiter, weil ich zunächst versuchen möchte die Vorlesungen mit den bisher angesprochenen Mitteln zu kapieren. Wenn ich das schaffe, würde ich mir auch gerne weitere Dinge aneignen, aber so weit bin ich noch nicht 😮

    So, zurück zum Thema:
    Die For-Schleife meinst du also nicht... Tja, wie ein dummer würde ich dann ein zweites mal raten und die while Schleife vorschlagen 😃


  • Mod

    Tuelle schrieb:

    Hallo Sepp,

    schön, dass so schnell jemand auf meine Anfrage reagiert!

    Also die Sache mit dem iostream habe ich jetzt auch schon mehrfach beim durchsuchen des Internets gefunden, die helfen mir nur leider derzeit nicht weiter, weil ich zunächst versuchen möchte die Vorlesungen mit den bisher angesprochenen Mitteln zu kapieren. Wenn ich das schaffe, würde ich mir auch gerne weitere Dinge aneignen, aber so weit bin ich noch nicht 😮

    Dann musst du hoffen, dass jemand diesen Thread liest, der manchmal die C Funktionen zur Eingabe benutzt.

    So, zurück zum Thema:
    Die For-Schleife meinst du also nicht... Tja, wie ein dummer würde ich dann ein zweites mal raten und die while Schleife vorschlagen 😃

    Rate lieber nicht, sondern erklär mal, warum while hier das passende sein könnte. Sonst musst du bei der nächsten Aufgabe wieder fragen.



  • Also ganz geraten war es nicht, denn du hattest mir ja den Hinweis "Solange ... bis ..." gegeben. Ich bin dann in meinem Nachschlagewerk darauf gestossen, dass die Anweisung bei der while-Schleife solange ausgeführt wird, wie der Kontrollausdruck "wahr" ist, also ungleich 0.

    Allerdings muss ich zu meiner Schande gestehen, dass ich auf das solange bis nicht selber gekommen wäre 🙂


  • Mod

    Tuelle schrieb:

    Also ganz geraten war es nicht, denn du hattest mir ja den Hinweis "Solange ... bis ..." gegeben. Ich bin dann in meinem Nachschlagewerk darauf gestossen, dass die Anweisung bei der while-Schleife solange ausgeführt wird, wie der Kontrollausdruck "wahr" ist, also ungleich 0.

    Allerdings muss ich zu meiner Schande gestehen, dass ich auf das solange bis nicht selber gekommen wäre 🙂

    Nun, du hast Recht und jetzt weißt du es auch für das nächste Mal.



  • okay, okay....

    Zumindest weiß ich jetzt, dass ich while und switch verwenden muss...

    Aber mir fehlt nach wie vor der Ansatz...
    Könntest du eventuell etwas konkreter werden?

    Ich weiß nicht wie ich anfangen soll. Muss ich zuerst jede der vier Zeichen integrieren?

    Also

    int a='3';
    int b='7';
    int c='a';
    int d='B';

    Muss ich dann noch ein weiteres festsetzen für getchar? Und wie bringe ich das getchar nun ins Spiel? Also ich muss sagen, ich bin total auf dem Holzweg... Und ich weiß nicht wie ich da runterkommen soll...


  • Mod

    Tuelle schrieb:

    Ich weiß nicht wie ich anfangen soll. Muss ich zuerst jede der vier Zeichen integrieren?

    Du musst irgendwas haben, wo du für jedes der vier Zeichen speichern kannst, wie oft es vorgekommen ist.

    Also

    int a='3';
    int b='7';
    int c='a';
    int d='B';

    Autsch. Wie viel C++ habt ihr eigentlich gemacht? Das sieht aus wie: C++ mal vom weiten gesehen, aber dabei nicht einmal aufgepasst.

    Also ich muss sagen, ich bin total auf dem Holzweg... Und ich weiß nicht wie ich da runterkommen soll...

    Nach dem zu urteilen, was du da oben machen wolltest, solltest du in deinem Lehrmaterial oder irgendeinem anderen Lehrmaterial auf der ersten Seite anfangen zu lesen. Und zwar gründlich.

    Aber mir fehlt nach wie vor der Ansatz...
    Könntest du eventuell etwas konkreter werden?

    Ich werde dir mal einen Pseudocode geben, den kannst du dann ausfüllen mit den Elementen die du aus deinem Kurs kennst:

    Mache jeweils einen Zähler für 3, 7, a und B;
    Setze die Zähler auf 0;
    
    Lese so lange ein Zeichen ein, bis dieses Zeichen STRG+Z ist (Hinweis: STRG+Z soll heißen, dass EOF erreicht wird, schlag das mal nach was das heißt). 
    Wenn das Zeichen nicht STRG+Z ist, dann mach das was in den Klammern steht, ansonsten fahre nach den Klammern fort:
     {
      Prüfe, ob das Zeichen '3' war. Wenn ja, erhöhe den Zähler für '3';
      Prüfe, ob das Zeichen '7' war. Wenn ja, erhöhe den Zähler für '7';
      Prüfe, ob das Zeichen 'a' war. Wenn ja, erhöhe den Zähler für 'a';
      Prüfe, ob das Zeichen 'B' war. Wenn ja, erhöhe den Zähler für 'B';
     }
    
    Gebe die Werte der Zähler aus;
    


  • Aaaaaaalsoooooo:

    #include <stdio.h>
    int main(void)
    {
    int eingabe;
    int a = 0;
    int B = 0;
    int drei = 0;
    int sieben = 0;

    printf("Zeichenzaehler - um zu Zählen STRG + Z druecken \nund mit der Eingabetaste bestaetigen.\n";
    while((eingabe = getchar()) != EOF)
    {
    if(eingabe == 'a')
    a++;
    if(eingabe == 'B')
    B++;
    if(eingabe == '3')
    drei++;
    if(eingabe == '7')
    sieben++;

    }
    printf("Anzahl der Zeichen \"a\":%d\nAnzahl der Zeichen \"B\":%d\nAnzahl der Zeichen \"3\":%d\nAnzahl der Zeichen \"7\":%d\n\n",a,B,sieben,drei);

    return 0;
    }

    Also dies läuft ohne switch... Werde es nun nochmal mit switch versuchen....

    EDIT: okay Sepp, du hast Recht! Wir machen C und nicht C++!



  • Wegen dem switch, das habe ich nun so versucht: Es klappt 🙂

    switch(eingabe)
    {
    case 'a':
    a++;
    case 'B':
    B++;
    case '3':
    drei++;
    case '7':
    sieben++;
    }



  • Überprüfe mal die Ausgabe...

    Dir fehlen noch break-Anweisungen innerhalb der 'case'-Verzweigungen.


Anmelden zum Antworten