4Danke
ERLEDIGT
NEIN
NEIN
ANTWORTEN
14
14
ZUGRIFFE
614
614
EMPFEHLEN
-
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.
-
27.11.10 23:01 #2
- 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...
-
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.
-
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".Albert Einstein sagte einmal:
"Wichtig ist, dass man nicht aufhört zu fragen"- Fertige Threads als erledigt markieren
- Hilfreiche beiträge als posoitiv bewerten
-
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)
-
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
-
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
-
Also ich finde das Kontoverwaltungsprogramm cooler als das Kinoprogramm, also werde ich mich mal ran machen.
-
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.
-
Du meinst diese
Stelle?Code cpp:1
fgets(korrekt, 6, stdin);
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'; }
-
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?
-
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ß
-
Cool, danke für die verständliche Antwort.

Gruß yax.
-
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.
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).
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„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
-
Ähnliche Themen
-
Konsolenprogramm mit UI
Von GalaxyWarrior im Forum C/C++Antworten: 0Letzter Beitrag: 03.09.10, 21:28 -
Konsolenprogramm compilieren
Von Roumeo im Forum JavaAntworten: 4Letzter Beitrag: 30.01.09, 09:21 -
Konsolenprogramm im Hintergrund starten
Von dila71 im Forum Microsoft WindowsAntworten: 2Letzter Beitrag: 03.06.08, 15:54 -
Aus Konsolenprogramm das Verzeichnis wechseln
Von Andreas Gaisbauer im Forum .NET CaféAntworten: 3Letzter Beitrag: 19.05.08, 23:43 -
Ein kleines Konsolenprogramm
Von flashdrunk im Forum C/C++Antworten: 2Letzter Beitrag: 13.05.03, 11:27





Zitieren



Tatsache.
Login






