Anfängerproblem mit C

Topsa

Topsa

Aktives Mitglied
Thread Starter
Dabei seit
05.02.2004
Beiträge
213
Reaktionspunkte
0
Hallo Leute,

ich hab' mich dazu durchgerungen es mal mit C zu versuchen. Doch das folgende, aus dem c-openbook von pronix.de stammende beispiel funktioniert nicht. Auch mit dieser "Erweiterung" nicht:
Code:
#define Fflush(int_keyboard_buffer)\
   while(( (int_keyboard_buffer) = getchar()) != '\n')

Dies ist das Beispiel:

Code:
#include <stdio.h>

int main()
{
   int a,b,check;

   printf("Bitte zwei Zahlen eingeben: ");
   check=scanf("%d %d",&a,&b);
   fflush(stdin);  /* Unter Linux entfernen */
   //getchar()     /* für Linux */
   /* Bei check istgleich 2 wahr die Eingabe richtig */
   if(check==2)
      printf("Beide Zahlen richtig %d und %d\n",a,b);
   /* … nicht richtig, also wahr die 2. Zahl falsch */
   else if(check==1)
      {
         printf("Die 2.Zahl hat das falsche Format!!\n");
         printf("Bitte Eingabe wiederholen: ");
         /* noch ein Versuch */
         check=scanf("%d",&b);
         fflush(stdin);
         if(check)
            printf("Eingabe Ok. Ihre Zahlen %d %d\n",a,b);
         else
            printf("Leider nochmals falsch\n");
      }
   else
      printf("Die Erste oder beide Eingaben waren falsch!\n");
   return 0;
}
Kann mir jemand helfen, was ich da falsch verstehe und was da nicht klappt. Ich benutze Xcode.

Topsa
 
hmm, er hat die absätze nicht richtig genommen.
 
also ich seh keinen Fehler und bei mir läufts auf xcode als standard tool einwandfrei ohne fehler.

bitte beschreib genauer was passiert und was du machst.

lg, stessi!
 
man soll 2 zahlen eingeben. wenn z.b. 1 und 2 eingibt sagt er die Zahlen. Wenn man d und 1 eingibt sagt er das die erste oder beide Tahlen Falsch waren. Wenn man 1 und d eingibt sagt er das die 2. Zahl falsch ist. Und das funktioniert nicht richtig.

Topsa
 
Hat den keiner eine Ahnung? Ich komm so irgentwie nicht weiter wenn die Codes nicht laufen und ich weiß nicht warum.
Hopefully

topsa
 
Vor allen Dingen hab ich noch keine Ahnung, was der Code deiner Meinung nach tun soll, und was wirklich passiert.

Solange die Fehlerbeschreibung so nebulös ist wirst du kaum klare Antworten bekommen können.


Gruß,

?=?
 
Hier ist die definition aus dem "Buch" :check
 
Hast du das per Copy And Paste übernommen?

Wenn ja, dann schäm dich, Chändlicher! Aufgrund von verschiedenen Zeichencodierungen werden gelegentlich unsichtbare Steuerzeichen beim C&P eingefügt, welches dann dein Script unbrauchbar macht.

Also abtippen. Dann lernt man auch besser.

Liebe Grüße

Yves
 
Topsa schrieb:
Hier ist die definition aus dem "Buch" :check

...damit haben wir nun die Quelle, aber noch keine exakte Beschreibung, wie sich das Programm bei dir verhält.
Und ohne Exaktheit wirds beim Fehlersuchen sehr, sehr mühsam :(


Ein bischen OT: imho ist der Programmierstil in dem Beispiel sehr Fehlerträchtig!
Bei einem Anfänger würd ich sowas erwarten. In einem Lehrbuch hat sowas nix zu suchen.
Besorg dir lieber eine andere Quelle!


Gruß,

?=?
 
Ich würde ja immer noch sagen, das es an dem Copy'n'Paste liegt…
 
Ich tip das mal ab... aber das dauert... ich meld mich. Wie ist das eigentlich mit dem fflush befehl? läuft der unter osX?

topsa
 
habe sowohl das Beispiel im Posting als auch das im Link per Copy & Paste in Xcode übernommen, beide laufen. Hier die Ausgabe:

[Session started at 2004-09-09 19:13:55 +0200.]
Bitte zwei Zahlen eingeben: 1 2
Beide Zahlen richtig 1 und 2

Executable “testC” has exited with status 0.

Ansonsten: Warum nicht gleich C++?
[Eigenwerbung]
pwollschlaeger.de/
Alles Listings laufen auf dem PC, unter Linux und auf dem Mac.
Probier mal das Beispiel Macintosh.
Und das ganze Buch kostet nur 9,95.
[/Eigenwerbung]
 
Zunächst, warum C?
Ich dachte ich probiere es erstmal damit und schaue dann weiter.
Danach, so wie ich das verstanden habe soll der Code überprüfen, ob auch wirklich 2 Zahlen eingegeben wurden (wenn ein Buchstabe eingegeben wird = fehler, neu eintippen) um Fehlern im Prog-ablauf vorzubeugen. Und eben das funzt nicht.
Ich bin jetzt gleich fertig mit abtippen und schau dann mal weiter.

Topsa
 
Nanu, ich hab den Code abgetippt und jetzt läuft er erst recht nicht. Kann das damit zusammenhängen, dass ich nicht 2 Tabulatoren hintereinandersetzen kann? Ich meine statt : tab tab
tab space tab

edit: Wars doch nicht, tippfehler nach denen ich über 5 min gesucht hatte sind nun beseitigt. Hier noch mal was er bei einem Fehler ausspuckt.

Bitte zwei Zahlen eingeben: 1 d
Die 2. Zahl hat das falsche Format!!
Bitte Eingabe wiederholen: Leider nochmals falsch

ha has exited with status 0.


versteht man jetzt was ich meine?

Topsa
 
Zuletzt bearbeitet:
schmeiß mal die zeile
fflush(stdin);
raus und mach in der folgezeile die beiden "//" weg

(weiß einer was // bedeutet ?? ist das auch Kommentar ? weiß es nimmer)

versuchs dann noch mal

ist das dein erster programmierversuch ? lief überhaupt schon mal ein programm ?
will ja nix sagen...fang doch mal kleiner an, du arbeitest da gleich mit adressen statt mit variablen....

tip von mir(bin programmierer)
fang erst mal mit einfachstem C an, Pointer ...Objektorientierung kommt später
 
an den Tabs kann es nicht liegen, denn jeder C-Compiler ignoriert "white spaces", also Tabulatoren, Leerstellen und Zeilenumbrüche. Letztere mit einer Ausnahme: Texte in Anführunge dürfen nicht umgebrochen werden.
Ansonsten: Welchen Fehler meldet der Compiler?

Noch ne Frage: Warum nimmst du nicht Xcode, die kostenlose Entwicklungsumgebung von Apple? Ist viel bequemer als ein C-Compiler unter DOS.
 
@ bitchruncher: wie man meinem Posting mit dem Link hoffentlich entnehmen kann, versuche ich es mit diesem openbook. Und bin jetzt an diesem Punkt angelangt. Wenn du die Begründung suchst, was das zu bedeuten hat mit adressen und so musst du dir Kram mal durchlesen. Ich hab es mal mit Basic probiert (das alte Wohl gemerkt) und mal mit Pascal aufm windoof als ich 10 oder so war (4 Jahre her). // ist auch ein kommentar, ja.
@Wosoft: ich benutze ja Xcode, aber die beispiele in dem Openbook werden nur
mit diesem dosding "visualisiert". Und seh ich das richtig, das ich den Code auch ohne Tabs runterrasseln könnte und die tabs nur der übersichtlichkeit dienen?

Tospa
 
Bitcruncher schrieb:
tip von mir(bin programmierer)
fang erst mal mit einfachstem C an, Pointer ...Objektorientierung kommt später
Bin auch hauptberuflich Systemprogrammierer. Mein Tipp ist der von Barne Stroustrup:
"Es ist nicht nur nicht erforderlich, zuerst C zu lernen, sondern auch eine schlechte Empfehlung."

Ansonsten: Pointer gibt es auch in C. Schon jeder Array ist ein Pointer auf dessen erstes Element mit dem vollen Risiko, über das lettze Element hinaus zu schreiben. Mit eine Array-Klasse in C++ kann man so etwas ausschließen.
 
Gibt es eine zweite Eingabezeile und genau sieht die aus?

Zu fflush(): Die Funktion wird auf dem Mac mit Sicherheit funktionieren :cool:
Allerdings kann es da sehrwohl kleine aber entscheidende plattformabhängige Unterschiede geben. Will heissen:
Was man mit nem MS-Compiler auf Windows mit "fflush(stdin)" macht läuft mit gcc (und der entsprechenden Runtime-Lib) vielleicht nicht und man braucht andere Befehle, z.B. getchar() (siehe Beispiel).

Zum einen solltest du mal die "Linux Variante" (getchar() statt fflush(stdin)) ausprobieren da ich vermute, das die Mac RT Bibliotheken eher mit Linux, als mit MS vergleichbar sind.
Falls das auch noch keinen Erfolg bringt sollte auch das zweite "fflush(stdin)" durch ein "getchar()" ersetzt werden.
Das Beispiel scheint mir nicht gerade sorgfältig ausgearbeitet zu sein.

Soviel zur Ferndiagnose.
Wenn du programmieren lernen willst solltest du dich asap mit einem passenden Debugger vertraut machen ;)
Seit über dreißig Jahren besteht bei der Mehrheit der Leute das Programmieren zum größten Teil aus Fehlersuche.


Gruß,

?=?
 
Topsa schrieb:
@ bitchruncher: wie man meinem Posting mit dem Link hoffentlich entnehmen kann, versuche ich es mit diesem openbook. Und bin jetzt an diesem Punkt angelangt. Wenn du die Begründung suchst, was das zu bedeuten hat mit adressen und so musst du dir Kram mal durchlesen. Ich hab es mal mit Basic probiert (das alte Wohl gemerkt) und mal mit Pascal aufm windoof als ich 10 oder so war (4 Jahre her). // ist auch ein kommentar, ja.
@Wosoft: ich benutze ja Xcode, aber die beispiele in dem Openbook werden nur
mit diesem dosding "visualisiert". Und seh ich das richtig, das ich den Code auch ohne Tabs runterrasseln könnte und die tabs nur der übersichtlichkeit dienen?

Tospa
du kannst den Quelltext auch ohne Tabs eingeben (siehe mein vorheriges Posting zu "white spaces"). Ansonsten: Ob du das Ergebnis in einem DOS-Fenster siehtst oder im Xcode-Ausgabe-Fenster spielt doch keine Rolle.
 
Zurück
Oben Unten