tutorials.de Buch-Aktion 05/2012
Like Tree4Danke
  • 1 Beitrag von Trulleberg
  • 1 Beitrag von Bismark
  • 1 Beitrag von sheel
  • 1 Beitrag von Matthias Reitinger
ERLEDIGT
NEIN
ANTWORTEN
14
ZUGRIFFE
614
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    yax yax ist offline Mitglied Gold
    Registriert seit
    Jul 2010
    Beiträge
    175
    Hallo

    ich habe vor einiger Zeit angefangen C zu lernen, und jetzt wollte ich das gelernte mal richtig anwenden doch ich weiß nicht mit was für einem Konsolenprogramm. Also ich kann auf jeden fall mit Datentypen, Funktionen, Zeigern und Arrays umgehen.

    Also hat jemand eine idee was ich programmieren könnte?

    Gruß.

    PS: Danke schon einmal im Voraus.
     

  2. #2
    Trulleberg Trulleberg ist offline Mitglied Bronze
    Registriert seit
    Oct 2010
    Beiträge
    35
    Du könntest z.B. ein Programm schreiben, welches eine Textdatei liest und zeilenweise den Inhalt ausgibt. Z.B. wäre auch deine Quellcodedatei (irgendwas.c) dafür geeignet. Nachdem das geklappt hat, könntest du dich steigern und die Ansprüche verfeinern, z.B. Zählen der Zeilen,Worte, Formatieren bestimmter Zeilen...
    yax bedankt sich. 

  3. #3
    yax yax ist offline Mitglied Gold
    Registriert seit
    Jul 2010
    Beiträge
    175
    Da gibt es nur ein Problem ich kann so Dateien oder so noch nicht einlesen, und ich möchte ja nur das gelernte befestigen.

    Gruß yax

    PS: Danke für die schnelle Antwort.
     

  4. #4
    Avatar von Bismark
    Bismark Bismark ist offline Mitglied Gold
    Registriert seit
    Oct 2007
    Beiträge
    148
    Hi,
    du kannst ja z.B. ein (Taschen-)Rechner programmieren, dass ist eine "klassische" Übungsaufgabe in Schulen bzw. Unis. Du könntest doch auch ein "Kinoprogramm" programmieren, womit du Karten "verkaufts" vllt. Kundendaten verwaltest ober aber auchz.b. neue Kinofilme "einstellst".
    yax bedankt sich. 
    Albert Einstein sagte einmal:

    "Wichtig ist, dass man nicht aufhört zu fragen"
    • Fertige Threads als erledigt markieren
    • Hilfreiche beiträge als posoitiv bewerten

  5. #5
    yax yax ist offline Mitglied Gold
    Registriert seit
    Jul 2010
    Beiträge
    175
    Danke Bismark, das Kinoprogramm ist eine super Idee.

    Trotzdem nehme ich gerne noch andere Vorschläge an.
    Geändert von yax (28.11.10 um 20:39 Uhr)
     

  6. #6
    Avatar von Bismark
    Bismark Bismark ist offline Mitglied Gold
    Registriert seit
    Oct 2007
    Beiträge
    148
    Hi,
    mach ich doch gerne.

    du könntest doch auch z.b. ein "Depot- bzw Kontoverwaltungsprogramm" machen, mit dem du halt kontos erstellen Geld "abheben und legen" kannst.
     
    Albert Einstein sagte einmal:

    "Wichtig ist, dass man nicht aufhört zu fragen"
    • Fertige Threads als erledigt markieren
    • Hilfreiche beiträge als posoitiv bewerten

  7. #7
    Avatar von Bismark
    Bismark Bismark ist offline Mitglied Gold
    Registriert seit
    Oct 2007
    Beiträge
    148
    Hi,
    mach ich doch gerne.

    du könntest doch auch z.b. ein "Depot- bzw Kontoverwaltungsprogramm" machen, mit dem du halt kontos erstellen Geld "abheben und legen" kannst.
     
    Albert Einstein sagte einmal:

    "Wichtig ist, dass man nicht aufhört zu fragen"
    • Fertige Threads als erledigt markieren
    • Hilfreiche beiträge als posoitiv bewerten

  8. #8
    yax yax ist offline Mitglied Gold
    Registriert seit
    Jul 2010
    Beiträge
    175
    Also ich finde das Kontoverwaltungsprogramm cooler als das Kinoprogramm, also werde ich mich mal ran machen.
     

  9. #9
    yax yax ist offline Mitglied Gold
    Registriert seit
    Jul 2010
    Beiträge
    175
    Also, ich weiß nicht ob ich ein neues Thema anfangen muss (wenn ja dann könnt ihr es ja sagen) aber ich habe jetzt mal angefangen diese Art Bank zu programmieren, doch ich habe ein kleines Problem wenn ich zwei Strings vergleichen möchte.

    Hier erst einmal mein Code:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    char korrekt[6];
    typedef struct konto {
            char name[30];
            int guthaben;
            int alter;
            long handynummer;
            }konto;
     
    int auswahl();
     
    konto kontoAnlegen() {
          konto konto1;
          int ziffer;
          char string[10] = "nein";
          
          printf("------------ Neues Konto anlegen ---------------\n\n");
          
          
          printf("Wie lautet ihre Handynummer: ");
          do { scanf("%d", &konto1.handynummer); } while( getchar() != '\n');
          printf("Wie alt sind sie: ");
          do{ scanf("%d", &konto1.alter); } while( getchar() != '\n');
          printf("Wie ist ihr Vor- und ihr Nachname: ");
          fgets(konto1.name, 30, stdin);
          printf("Ihr Konto wurde angelegt. Bitte ueberpruefen sie ihre eingabe: \n");
          printf("Name        : %s", konto1.name);
          printf("Alter       : %d\n", konto1.alter);
          printf("Handynummer : %d\n", konto1.handynummer);
          printf("Sind die Angaben korrekt? (ja oder nein)");
          fgets(korrekt, 6, stdin);
          printf("%s\n",korrekt);
          if (strcmp(korrekt,string) == 0) {
              printf("Welche Angabe ist nicht Korrekt: \n");
             printf("1. Name\n");
             printf("2. Alter\n");
             printf("3. Handynummer\n");
             printf("Bitte geben sie nun die entsprechende Ziffer ein: ");
             scanf("d",&ziffer);
             switch (ziffer) {
                 case 1: printf("Bitte geben sie ihren korrekten Namen ein: ");
                         fgets(konto1.name, 30, stdin);
                         break;
                 case 2: printf("Bitte geben sie ihr korrektes Alter ein: ");
                         do { scanf("%d",&konto1.alter); } while(getchar() != '\n');
                         break;
                 case 3: printf("Bitte geben sie ihre korrekte Handynummer ein: ");
                         do { scanf("%d", &konto1.handynummer); } while(getchar() != '\n');
                         break;
                 
          }
             }
          return konto1;
            
          }
          
     
     
    int main(int argc, char *argv[])
    {
        int nummer;
        nummer = auswahl();
        
        switch (nummer) {
               case 1: break;
               case 2: break;
               case 3: break;
               case 4: break;
               case 5: kontoAnlegen();
                       break;
               }
        
        system("PAUSE");
        return EXIT_SUCCESS;
    }
     
    int auswahl() {
        int auswahl;
        printf("-------------- Bankomat -----------------\n\n");
        printf("Was moechten sie tun: \n");
        printf("1. Guthaben abfragen\n");
        printf("2. Guthaben abheben\n");
        printf("3. Handy aufladen\n");
        printf("4. Geld überweisen\n");
        printf("5. Neues Konto anlegen.\n");
        printf("Bitte waehlen sie nun eine Nummer: ");
        scanf("%d", &auswahl);
        
        
        return auswahl;
    }

    So, wenn ich das Programm jetzt ausführe, ein neues Konto anlege, und dann angebe dass die Eingabe nicht korrekt war, also nein eingebe, wird nicht abgefragt was falsch ist und so weiter.

    Kann mir jemand helfen?

    Gruß yax.
     

  10. #10
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Du meinst diese
    Code cpp:
    1
    
    fgets(korrekt, 6, stdin);
    Stelle?

    Wahrscheinlich ist das Problem, dass fgets den Zeilenumbruch mitspeichert.
    Leg noch ein int (hier j) an und mach nach dem fgets ca sowas:
    Code cpp:
    1
    2
    3
    4
    5
    6
    
    while(1)
    {
        j=strlen(korrekt);
        if(korrekt[j]!=10&&korrekt[j]!=13&&korrekt[j]!=-1)break;
        korrekt[j-1]='\0';
    }
     

  11. #11
    yax yax ist offline Mitglied Gold
    Registriert seit
    Jul 2010
    Beiträge
    175
    Okay, danke für die Antwort. Aber irgendwie verstehe ich nicht, was das ganze bedeutet. Also ich bin ja noch anfänger, und übe halt gerade noch. Könntest du mir das vielleicht erklären, warum genau so?
     

  12. #12
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Merke gerade einen Fehler in meinem Code.
    Hier richtig

    Code cpp:
    1
    2
    3
    4
    5
    6
    
    while(1)
    {
        j=strlen(korrekt)-1;
        if(korrekt[j]!=10&&korrekt[j]!=13&&korrekt[j]!=-1)break;
        korrekt[j]='\0';
    }

    Erklärung: fgets speichert die Entertaste als Zeilenwechsel mit in den String ab.
    Wenn du also mit "nein\n" statt "nein" vergleichen würdest, würde es funktionieren.

    Damit man aber weiterhin "nein" verwenden kann (und nicht komplett verwirrt wird) behandle ich die Eingabe einfach sofort nach dem fgets entsprechend.

    Dafür:
    1)Ermittle ich zuerst, welcher Index im char-Array der letzte Eingegebene Buchstabe ist.
    Gibt man zB "nein" ein, ergibt strlen 4 (weil 4 Buchstaben)
    Weil bei Array aber von 0 weg gezählt wird, ist n 0, e 1, i 2 und das letzte n 3
    Der letzte Buchstabe, n, ist also am Index 3 = strlen -1

    2)Dann prüfe ich, ob das Zeichen am besagten Index 10 oder 13 ist.
    Beide Nummern sind ca. gleichbedeutend mit dem \n, also einem Zeilenwechsel.

    Wenn das letzte Zeichen keines der beiden ist, wird die Schleife abgebrochen.
    Sonst wird das letzte Zeichen weggeschnitten und das Ganze wiederholt.
    Es könnte ja sein, dass nicht nur ein 10/13 am Schluss war.
    Die Schleife stellt sicher, das alle entfernt werden

    Zum Wegkürzen des letzten Buchstaben: In C wird das Stringende durch den Code 0 gekennzeichnet, eben damit man weis wo die Eingabe aufhört.
    strlen zB macht nichts anderes als jedes Zeichen durchzuprüfen, wann endlich die 0 kommt und dann hintergibt, an wievielter Stelle die 0 gefunden wurde.
    In j hab ich jetzt den Index des letzten Zeichens, eins weiter wäre die 0.
    Um das letzte Zeichen zu entfernen, überschreibe ich das auch einfach mit 0.
    Beim Durchsuchen kommt jetzt meine neue 0 als Erste und markiert damit das Stringende.

    Zum -1, das auch in der Schleife geprüft wird: Ist nur der Vollständigkeit halber da, weil fgets ja auch aus echten Dateien statt der Tastatur einlesen kann und dort eine Zeile ja auch mit dem Ende der kompletten Datei fertig sein könnte, ohne einen eigenen Zeilenumbruch noch dazu.
    Ist hier nicht unbedingt nötig, schadet aber auch nicht.

    Gruß
    yax bedankt sich. 

  13. #13
    yax yax ist offline Mitglied Gold
    Registriert seit
    Jul 2010
    Beiträge
    175
    Cool, danke für die verständliche Antwort.

    Gruß yax.
     

  14. #14
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.802
    Blog-Einträge
    5
    Zitat Zitat von sheel Beitrag anzeigen
    2)Dann prüfe ich, ob das Zeichen am besagten Index 10 oder 13 ist.
    Beide Nummern sind ca. gleichbedeutend mit dem \n, also einem Zeilenwechsel.
    Genauer gesagt ist '\n' == 10 (Zeilenvorschub) und '\r' == 13 (Wagenrücklauf). Man kann diese Zeichen auch gleich so hinschreiben, es gibt keinen Grund hier auf die konkreten Zahlenwerte auszuweichen.

    Zitat Zitat von sheel Beitrag anzeigen
    Wenn das letzte Zeichen keines der beiden ist, wird die Schleife abgebrochen.
    Sonst wird das letzte Zeichen weggeschnitten und das Ganze wiederholt.
    Es könnte ja sein, dass nicht nur ein 10/13 am Schluss war.
    Mehrere '\n' am Ende sind nicht möglich, da fgets beim ersten '\n' stoppt. Ein '\r' sollte überhaupt nicht auftauchen (es sei denn der Benutzer gibt es selbst ein).

    Zitat Zitat von sheel Beitrag anzeigen
    Zum -1, das auch in der Schleife geprüft wird: Ist nur der Vollständigkeit halber da, weil fgets ja auch aus echten Dateien statt der Tastatur einlesen kann und dort eine Zeile ja auch mit dem Ende der kompletten Datei fertig sein könnte, ohne einen eigenen Zeilenumbruch noch dazu.
    Ist hier nicht unbedingt nötig, schadet aber auch nicht.
    C fügt in dem Fall aber kein Zeichen ein, das überhaupt nicht in der Datei steht. Die Überprüfung auf -1 ist also überflüssig.

    Der Codeschnipsel lässt sich also so vereinfachen:
    Code c:
    1
    2
    3
    4
    
    j = strlen(korrekt)-1;
    if (korrekt[j] == '\n')
      korrekt[j] = '\0';
    }

    Wenn man ganz korrekt sein will sollte man übrigens noch den Rückgabewert von fgets abfragen (der ist im Fehlerfall NULL).

    Grüße,
    Matthias
    sheel bedankt sich. 
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

  15. #15
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Zitat Zitat von Matthias Reitinger Beitrag anzeigen
    C fügt in dem Fall aber kein Zeichen ein, das überhaupt nicht in der Datei steht. Die Überprüfung auf -1 ist also überflüssig.
    Tatsache.
    Hast mich von einem langjährigen Irrglauben befreit
     

Ähnliche Themen

  1. Konsolenprogramm mit UI
    Von GalaxyWarrior im Forum C/C++
    Antworten: 0
    Letzter Beitrag: 03.09.10, 21:28
  2. Konsolenprogramm compilieren
    Von Roumeo im Forum Java
    Antworten: 4
    Letzter Beitrag: 30.01.09, 09:21
  3. Konsolenprogramm im Hintergrund starten
    Von dila71 im Forum Microsoft Windows
    Antworten: 2
    Letzter Beitrag: 03.06.08, 15:54
  4. Aus Konsolenprogramm das Verzeichnis wechseln
    Von Andreas Gaisbauer im Forum .NET Café
    Antworten: 3
    Letzter Beitrag: 19.05.08, 23:43
  5. Ein kleines Konsolenprogramm
    Von flashdrunk im Forum C/C++
    Antworten: 2
    Letzter Beitrag: 13.05.03, 11:27