Frage zum C Tutorial (auf tutorials.at)

Schnelle objektorientierte, kompilierende Programmiersprache.
Benutzeravatar
tutorials.at
Beiträge: 10
Registriert: Mo Jan 19, 2009 2:23 pm
Wohnort: Wien
Kontaktdaten:

Re: Frage zum C Tutorial (auf tutorials.at)

Beitrag von tutorials.at » Di Jan 20, 2009 5:48 pm

Hinweis auf den Betreff ist drin (http://www.tutorials.at/forum.html).
Ich hoffe, dass es damit klarer ist.
Webmaster und Autor von Tutorials.at,
überarbeitet und erweitert 2008/2009, mit Tutorials zu C, Pascal und BASIC.

Benutzeravatar
soufian88
Beiträge: 288
Registriert: So Jan 18, 2009 1:01 pm

Re: Frage zum C Tutorial (auf tutorials.at)

Beitrag von soufian88 » Mi Jan 21, 2009 5:41 pm

Daten von der Tastatur mit scanf() einlesen beziehend auf das Tutorials.at

Damit sich das Fenster bei der Eingabeaufforderung nicht wieder durch scanf schließt kann man ja fflush(stdin) benutzen wie ich das verstanden habe.

Code: Alles auswählen

#include <stdio.h>
 
int main()
{
  int zahl1 = 0, zahl2 = 0;
 
  printf ("Geben Sie die erste Zahl ein: ");
  scanf ("%3d", &zahl1);
 
  fflush(stdin);   
 
  printf ("Geben Sie nun die zweite Zahl ein: ");
  scanf ("%d", &zahl2);

  fflush(stdin);
 
  printf ("\nDie eingegebenen Zahlen waren:\n");
  printf ("zahl1: %d\nzahl2: %d\n", zahl1, zahl2);
  getchar();
  return 0;
Ich musste aber noch ein fflush(sdtin) benutzen damit es bei mir klappt und auf das Beispiel von Tutorials.at war nur ein fflush(stdin) benutzt worden.
Das hat aber Andreas Hammer schon gesagt das es nicht klappen könnte :
Dieses Beispiel kann funktionieren, kann aber auch nicht funktionieren, je nachdem, welchen Compiler und welches Betriebssystem Sie verwenden.
und es liegt wohl am Lcc-win 32.^^

Aber ich habe aber noch andere möglichkeite gefunden damit das Fenster bei der Eingabeaufforderung nicht wieder durch scanf schließt das man das mit dem getchar(); eingibt und mit compiliert.

Code: Alles auswählen

#include <stdio.h>
 
int main()
{
  int zahl1 = 0, zahl2 = 0;
 
  printf ("Geben Sie die erste Zahl ein: ");
  scanf ("%3d", &zahl1);
 
  printf ("Geben Sie nun die zweite Zahl ein: ");
  scanf ("%d", &zahl2);
 
  printf ("\nDie eingegebenen Zahlen waren:\n");
  printf ("zahl1: %d\nzahl2: %d\n", zahl1, zahl2);
  getchar();
  getchar();
  return 0;
}

Und jetzt zu meine Frage kann man das auch unter Linux machen ?
Zuletzt geändert von Dirty Oerti am Mi Jan 21, 2009 5:44 pm, insgesamt 1-mal geändert.
Grund: Lesbar gemacht (es war ein code-Tag zu viel)
C ( Durchschnittlich ) C++ (am Lernen)

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Frage zum C Tutorial (auf tutorials.at)

Beitrag von Dirty Oerti » Mi Jan 21, 2009 5:50 pm

Am besten ist es, denke ich, wenn du dir deine eigene fflush schreibst.
Sie könnte z.B. so aussehen:

Code: Alles auswählen

void flush (void) {
   char trash[11];
   while (fgets(trash,10,stdin) != NULL);
}
Das müsste theoretisch die Standardausgabe leeren. Getestet habe ich es jetzt nicht.
Wenn es funktioniert (was ich annehme^^), dann sowohl unter Linux als auch unter Windows.#

fat-lobyte hatte da doch mal so eine eigene flush?
Wo ist die hingekommen?

*edit*
hab's gefunden
http://tutorial.proggen.org/doku.php?id ... put-puffer
*/edit*
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Benutzeravatar
soufian88
Beiträge: 288
Registriert: So Jan 18, 2009 1:01 pm

Re: Frage zum C Tutorial (auf tutorials.at)

Beitrag von soufian88 » Mi Jan 21, 2009 5:58 pm

Code: Alles auswählen

void flush (void) {
       char trash[11];
       while (fgets(trash,10,stdin) != NULL);
    }
So weit bin ich noch nicht.
Hat das irgendwas mit schleifen un Arrays zu tun ?

Ich benutze gerade tutorials.at ^^
C ( Durchschnittlich ) C++ (am Lernen)

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Frage zum C Tutorial (auf tutorials.at)

Beitrag von Dirty Oerti » Mi Jan 21, 2009 6:04 pm

Ja, da hast du ein Array aus 11 Chars und eine Schleife, die solange (nichts) tut bis sie keine Zeichen mehr von der Standardeingabe bekommt.

Das Problem, dass du hast:

fflush kann (!) zu Problemen führen und nicht richtig funktionieren.
Deshalb ist es meistens (!) sinnvoll, sich eine eigene kleine Funktion zu schreiben, die den Eingabepuffer leert.

Eine andere Variante als die meine hier findest du in der FAQ (siehe Link).

Deine Variante, einfach 2 mal getchar einzufügen ist nicht unbedingt gerade funktionstüchtig.
Gib doch am besten mal sowas ein:
12 12 12 12 12 12 12 12 12 gh 12 h h12j 2k31

Wartet dein Programm dann auch noch...?

Unter Linux kannst du das natürlich auch machen :)
Nochmal zur Sache mit dem Eingabepuffer:
Lies dir den FAQ-Artikel am besten mal durch.
Beschränke dich am besten erstmal auf den C-Teil.
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Benutzeravatar
tutorials.at
Beiträge: 10
Registriert: Mo Jan 19, 2009 2:23 pm
Wohnort: Wien
Kontaktdaten:

Re: Frage zum C Tutorial (auf tutorials.at)

Beitrag von tutorials.at » Mi Jan 21, 2009 7:11 pm

Hallo,

magst du nicht ein bisschen weiterlesen bevor du Fragen stellst?

Das steht nämlich auch in meinem Tutorial: (gleich darunter)
http://www.tutorials.at/c/03-dateneingabe-ausgabe.html#scanf hat geschrieben:Dieses Beispiel kann funktionieren, kann aber auch nicht funktionieren, je nachdem, welchen Compiler und welches Betriebssystem Sie verwenden. Das ist aber natürlich kein Ansatz, um plattformunabhängigen Code zu schreiben.

Eine Lösung für dieses Problem finden Sie hier [Link] und in Kapitel 13.1. Dazu fehlt Ihnen zum jetzigen Zeitpunkt aber noch das nötige Vorwissen (v.a. über Schleifen und Ausdrücke), weswegen ich den Lösungsansatz hier noch nicht näher vorstelle.
In Kap. 13.1 kommt dann - nebenbei - die Funktion vor:
http://www.tutorials.at/c/13-strukturen-dateizugriff.html#Strukturen hat geschrieben:

Code: Alles auswählen

void loescheTastaturpuffer()
{
  int c;
  while( ((c = getchar()) != EOF) && (c != '\n') )
     ;
}
Die funktioniert auch unter Linux.

Ich weiß, es ist sehr bequem, Fragen zu stellen (wenn jemand da ist).
Es gehört aber einfach zum Programmieren lernen dazu:
http://www.tutorials.at/c/c-tutorial.html#Fragen hat geschrieben:Was tun, wenn Sie im Laufe des Tutorials Fragen oder Probleme haben? Probieren Sie bitte zunächst, selbst eine Lösung zu finden bzw. selbst den Fehler in einem Programm zu finden. Stundenlanges Fehlersuchen kommt beim Programmieren hin und wieder vor. Die meisten Fehler lassen sich aber natürlich schneller finden. Eine kurze Pause hilft auch oft. Hier gilt es vor allem, Durchhaltevermögen zu beweisen und so lange dran zu bleiben, bis man den Fehler selbst gefunden hat. Das ist extrem wichtig und gehört zum Programmieren dazu!
@ alle anderen
Ich habe ja gesagt, dass ich alle wesentlichen Fehler/Mängel im C-Tutorial behoben habe.
Das habe ich auch tatsächlich! Dazu gehört fflush(stdin) eben auch dazu.
Webmaster und Autor von Tutorials.at,
überarbeitet und erweitert 2008/2009, mit Tutorials zu C, Pascal und BASIC.

Benutzeravatar
soufian88
Beiträge: 288
Registriert: So Jan 18, 2009 1:01 pm

Re: Frage zum C Tutorial (auf tutorials.at)

Beitrag von soufian88 » Mi Jan 21, 2009 7:20 pm

Ich weiß, es ist sehr bequem, Fragen zu stellen (wenn jemand da ist).
Es gehört aber einfach zum Programmieren lernen dazu:

http://www.tutorials.at/c/c-tutorial.html#Fragen hat geschrieben:Was tun, wenn Sie im Laufe des Tutorials Fragen oder Probleme haben? Probieren Sie bitte zunächst, selbst eine Lösung zu finden bzw. selbst den Fehler in einem Programm zu finden. Stundenlanges Fehlersuchen kommt beim Programmieren hin und wieder vor. Die meisten Fehler lassen sich aber natürlich schneller finden. Eine kurze Pause hilft auch oft. Hier gilt es vor allem, Durchhaltevermögen zu beweisen und so lange dran zu bleiben, bis man den Fehler selbst gefunden hat. Das ist extrem wichtig und gehört zum Programmieren dazu!


@ alle anderen
Ich habe ja gesagt, dass ich alle wesentlichen Fehler/Mängel im C-Tutorial behoben habe.
Das habe ich auch tatsächlich! Dazu gehört fflush(stdin) eben auch dazu.

Meine Frage war nur ob die funktion mit dem getchar(); auch unter linux geht oder nicht.^^
C ( Durchschnittlich ) C++ (am Lernen)

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Frage zum C Tutorial (auf tutorials.at)

Beitrag von Dirty Oerti » Mi Jan 21, 2009 7:29 pm

Ja, geht sie.
Nur war deine Lösung nicht optimal/sicher ;)
Deswegen der Hinweis auf die bessere Lösung.

@tutorials.at:
Ich denke, es ist vollkommen ok, wenn jemand hier eine Frage stellt.
Vorallem durchs Fragen lernt man so viel dazu.
Viel mehr, als mans durch Lesen schaffen könnte.
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Benutzeravatar
tutorials.at
Beiträge: 10
Registriert: Mo Jan 19, 2009 2:23 pm
Wohnort: Wien
Kontaktdaten:

Re: Frage zum C Tutorial (auf tutorials.at)

Beitrag von tutorials.at » Mi Jan 21, 2009 8:25 pm

Dirty Oerti hat geschrieben:Ich denke, es ist vollkommen ok, wenn jemand hier eine Frage stellt.
Vorallem durchs Fragen lernt man so viel dazu.
Viel mehr, als mans durch Lesen schaffen könnte.
Fragen ist sicher besser als Lesen, noch besser ist allerdings Selbst-Ausprobieren.

Ich finde es nur eine extrem schlechte Angewohnheit, ständig jemanden um Hilfe zu bitten.
Als Programmierer muss man einfach selbstständig arbeiten können, und sei es, wenn eine simple Doku gelesen werden muss. Das habe ich versucht und versuche ich, zu vermitteln.
Ich sehe das v.a. aus Autodidakten-Sicht, die Meinung eines Lehrers (Xin) mag dazu anders ausshen.

Ob getchar() auch unter Linux geht, hätte soufian88 z.B. einfach ausprobieren können.
Es gehen übrigens alle Beispiele unter Linux, da ich seit > 5 Jahren auch (fast) nur mehr mit Linux arbeite.
Darum habe ich auch alles unter Linux mit gcc getestet. Alles andere und Nicht-Plattformunabhängiges im Tutorial finde ich - mittlerweile - uninteressant.
getch() und getchar() sind übrigens in Kapitel 10.1 Thema in meinem Tutorial.
Webmaster und Autor von Tutorials.at,
überarbeitet und erweitert 2008/2009, mit Tutorials zu C, Pascal und BASIC.

Benutzeravatar
soufian88
Beiträge: 288
Registriert: So Jan 18, 2009 1:01 pm

Re: Frage zum C Tutorial (auf tutorials.at)

Beitrag von soufian88 » Mi Jan 21, 2009 8:30 pm

Ja da hast du wohl recht.
Ich Entschuldige mich muss mir mal irgendwo Ubuntu besorgen und erstmal installieren.
War eigentlich nicht aus Faultheit.
Ich hab ja das blöde Vista.
nochmals sorry.
C ( Durchschnittlich ) C++ (am Lernen)

Antworten