Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
Problem mit einfacher do while Schleife

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - C
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
bennynestler
Gast





BeitragVerfasst am: 03. Apr 2007 20:57   Titel: Problem mit einfacher do while Schleife

Hallo,

wir fangen gerade an in der FH C zu programmieren. Es ging dabei um eine kleine do while schleife. Der Programmcode sah wie folgt aus:

do
{
printf("Bitte geben sie als erstes das zu verzinsende Kapital ein: ");
status_Kapital = scanf("%f", &Kapital);
fflush(stdin);
}
while (status_Kapital != 1);

Wir programmieren in Windows mit dem Dev - Bloodsheed - Compiler. In Windows funktioniert dieser Schleifenteil auch wunderbar.

Nun habe ich zu Hause Ubuntu 6.2. Ich Arbeite mit Kate als Editor und compiliere ich mein Code mit gcc (Gibt es eigentlich noch eine andere Methode bzw. einen Compiler innerhalb des GNome - Desktops???).

Auf jedenfall gibt es bei mir immer das Problem, dass wenn ich ein unzulässiges Zeichen eingebe, sprich ich gebe für die floatingpoint zahl einen buchstaben ein, so schreibt er mir in einer art endlosschleifeimmer nur "bitte geben sie als erstes das zu verzinsende Kapital ein:". WIe gesagt, es läuft so lange bis ich das Programm mit Strg + C unterbreche.

Woran liegt das. Kann mir wer helfen? Ich habe immer gedacht C wäre eine Plattformunabhängige Programmiersprache.

Ich hoffe auf Hilfe,

MFG BennyNestler
 

sesame
Gast





BeitragVerfasst am: 03. Apr 2007 21:16   Titel:

C ist plattformunabhängig. Es gibt allerdings betriebssystemspezifische Befehle, die du verwenden kannst, z.B. bei Grafik. fflush brauchste z.b. auch nur bei mickisoft, soweit ich es beobachte.

versuche mal, den gleichen compiler mit den gleichen argumenten einzugeben. evtl. nimm auch eine gleiche entwicklungsumgebung für den anfang. das hilft.
ich benutze z.b. anjuta, netbeans und eclipse, alle mit dem gnu c-compiler.
denn: anderer compiler mit vielleicht sogar noch anderen argumenten -> wahrscheinlich anderes ergebnis.

unter win hilft dir dafür cygwin.

dann sollte es funktionieren bzw. du bekommst genau den fehlerpunkt gemeldet, wo es für ein system nicht mehr geht.
 

bennynestler
Gast





BeitragVerfasst am: 03. Apr 2007 22:15   Titel:

ich verstehe nicht ganz was du meinst!

der compiler ist doch in allen drei Entwicklungsebenen, die du aufgezählt hast der gnu c - compiler (gcc) oder nicht? da ist es doch egal in welchem Programm ich den c - code schreibe oder??

Ich hab mir nun anjuta heruntergeladen und dort das selbe c - programm geschrieben. Compilieren geht mit anjuta doch auch nicht oder? ich hab zumindest nicht herausbekommen wie. Ich habe also das in anjuta geschriebenen c - programm wieder mit gcc comiliert und dann ausgeführt und das ergebnis ist wieder mein vollgeschriebener bildschirm.

gerade habe ich noch nach minGW gesucht. allerdings finde ich dieses Programm nur für Windows.

Ich verstehe auch nicht recht warum die schleifenstruktur in windows klappt und in linux mir den ganzen bildschirm voll schreibt. Irgendwie kann ich mir das nicht anders erklären, als dass er in linux irgendwie nicht bei dem scanf befehl anhält und auf eine neue eingabe wartet. sondern immer den status schon als ungleich 1 liest und deshalb eine endlosschleife draus wird.

liegt das problem vielleicht wo anders?

MFG benny nestler
 

Janka



Anmeldungsdatum: 11.02.2006
Beiträge: 3569

BeitragVerfasst am: 04. Apr 2007 11:53   Titel:

C selbst ist Plattformunabhängig. Das wären dann do, { }, while und die Art, wie man Dinge notiert.

Die libc (scanf(), fflush() etc.) ist hingegen hochgradig plattformabhängig. Vom eingesetzten Compiler hängt die libc mittelbar ab, denn für die meisten Compiler gibt es eine bevorzugte libc.

Du gehst in deinem Beispiel davon aus, dass fflush(stdin) das fehlerhafte Zeichen aus dem Eingabedatenstrom entfernt. Das Verhalten von fflush() auf Input-Streams ist aber laut C99-Spezifikaktion nicht definiert. Du hast dich also von einer bestimmten Implementierung (Dev-Bloodsheed) abhängig gemacht.

Um das falsche Zeichen aufzufressen musst du getchar() statt fflush(stdin) benutzen. Falls du bisher aufgelaufenen Zeichen auffressen willst, machst du fseek(stdin, 0L, SEEK_END); getchar();
Das ist dann auch plattformunabhängig.

Wenn du weniger Plattformabhängigkeit haben willst, nimm eine Skriptsprache oder Java.

Janka
_________________
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.
 
Benutzer-Profile anzeigen Private Nachricht senden

PDA
Gast





BeitragVerfasst am: 04. Apr 2007 17:18   Titel:

GCC heißt übrigens
GNU Compiler Collection
Enthalten unter anderem Compiler für C, C++ und noch andere.
 

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - C Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy