Abbrechen bei Tastatureingabe



  • Hy!!

    Ich habe hier ein kleines Problem:

    Mein Programm:
    #include <stdio.h>

    void main() {
    float a = 0;
    char q = 'q';

    while(a != q){
    printf("Wert:");
    scanf("%d\n", &a);
    }
    }

    sollte solange zulassen, dass ein Wert eingegeben wird, bis q eingegeben wird! Nur leider klappt das nicht so recht!!

    Kann mir jemand helfen?

    Lg Doty



  • #include <stdio.h>
    
    int main() // Die main() Funktion muss I M M E R den Rückgabetyp int haben
    {
    	char a; // Es macht viel mehr Sinn wenn du gleich in ein char einliest
    
    	do{ // Die Schleife soll immer mindestens einmal ausgeführt werden, also bietet sich do-while an
    		printf("Wert: ");
    		scanf("%c", &a); // Hier wird ein einzelner Charakter eingelesen und in a gespeichert
    		flushall(); // Dann am besten den Buffer flushen
    	}while(a != 'q'); // Und hier die Abbruchbedingung überprüfen
    
    	return 0;
    }
    


  • das ist ja schön und gut aber all diese tollen befehle hatten wir in unserer programmieren übung noch nicht und der prof erlaubt sie nicht. bitte sagt also einfach was an Dotys lösung falsch ist, eure tollen künstertricks helfen hier niemanden, wenn du dich profilieren willst, mach das doch bitte in einem anderen forum...



  • öhm, wie bist du denn drauf?! mit dem falschen fuß aufgestanden oder cholerisch veranlagt? 🙄

    wie dem auch sei: in dem programm sind eben eine ganze reihe von fehlern versteckt.

    1. main sollte immer einen rückgabewert in form eines int liefern, deshalb sollte es eben "int main()" inkl. des "return 0" am ende anstatt "void main()" heißen.

    2. wenn ich ein zeichen (char!) einlesen will, dann benutze ich dafür eben auch eine variable vom typ char und nicht etwa float.

    3. beim einlesen mit der scanf-funktion muss der typ auch dem typ der variable, in die man einliest, entsprechen. oben wurde eine float-variable definiert, scanf erwartet mit "%d" aber einen int-wert, was natürlich nicht korrekt ist.

    4. bei dem vergleich in der while-schleife muss das q in einfache hochkommata eingeschlossen werden, um zu zeigen, dass auch wirklich das zeichen 'q' gemeint ist.

    verstehe nicht, was dich an dem korrekten quellcode nun stört...



  • dann lass das flushall() einfach weg und bau nen zeileumbruch ein



  • dotys kommilitone schrieb:

    das ist ja schön und gut aber all diese tollen befehle hatten wir in unserer programmieren übung noch nicht und der prof erlaubt sie nicht. bitte sagt also einfach was an Dotys lösung falsch ist, eure tollen künstertricks helfen hier niemanden, wenn du dich profilieren willst, mach das doch bitte in einem anderen forum...

    Gewöhn dir mal einen anderen Ton an, ihr wollt was von uns wissen und nicht wir von euch! Weiterhin ist der Code von JustSomeCoder kein Künstlertrick.

    Fehler liegt (mal abgesehen von der falschen main-Deklaration) bei der Bedingung in der while-Schleife: Man kann ein float nicht mit einem char vergleichen.



  • das mit int main ist ja schön und alles, aber was nützt mir das, wenn mein prof mir das dann als falsch ankreidet? 🙄

    flushall kennen wir nicht und dürfen wir nicht benutzen. so eine do while schleife kennen wir auch nicht und wir sollen NUR die dinge benutzen, die wir auch GEMACHT haben...nicht soo schwer zu verstehen oder? 🙄

    vielen dank für die konstruktive antworten



  • dotys kommilitone schrieb:

    bitte sagt also einfach was an Dotys lösung falsch ist

    So gut wie alles. Deswegen hab ich ja das ganze nochmal neu geschrieben.

    dotys kommilitone schrieb:

    das mit int main ist ja schön und alles, aber was nützt mir das, wenn mein prof mir das dann als falsch ankreidet? 🙄

    flushall kennen wir nicht und dürfen wir nicht benutzen. so eine do while schleife kennen wir auch nicht und wir sollen NUR die dinge benutzen, die wir auch GEMACHT haben...nicht soo schwer zu verstehen oder? 🙄

    Naja, die persönliche Meinung deines Professors ist da wohl relativ egal.

    Laut Standard muss die main Funktion immer den Rückgabewert int haben, ansonsten ist das kein richtiger C Code, womit du dann in diesem Forum hier klar falsch wärst.

    Außerdem können wir hier im Forum schlecht riechen was du schon alles "kennst" und "erlernt" hast. Aus diesem Grund hab ich meinen Code auch ausreichend kommentiert, sodass auch Anfänger ihn verstehen können.

    Aber du kannst natürlich auch nochmal die einzelnen Funktionen und Codefragmente selber nachschlagen, gibt ja ausreichend Dokumentationen und Referenzen.

    Zu guter letzt solltest du vielleicht nochmal deinen Umgangston überdenken. Wie bereits schon jemand erwähnt hat, bist du der Hilfesuchende.

    Viel Glück mit deinem "tollen" Professor, und dem Studium, in dem du noch nicht allzu weit gekommen zu sein scheinst.



  • dotys kommilitone schrieb:

    flushall kennen wir nicht und dürfen wir nicht benutzen.

    ist ja in ordnung, zwingt dich ja niemand, es zu benutzen.

    dotys kommilitone schrieb:

    so eine do while schleife kennen wir auch nicht und wir sollen NUR die dinge benutzen, die wir auch GEMACHT haben...

    und woher soll man wissen, dass ihr dies und jenes nicht verwenden dürft bzw. was ihr gemacht habt?! hellseherische fähigkeiten besitzen leider die wenigsten. und while- sowie do-while-schleifen sind nicht wirklich artfremd, von daher war der vorschlag von oben absolut einleuchtend und naheliegend. kann ja wie gesagt keiner wissen, was eure auflagen sind.

    entweder mehr infos, was ihr dürft und was ihr müsst, oder es wird schwer, eurem seltsamen prof., der main als void-funktion definiert (was ich mir überhaupt nicht vorstellen kann), was passendes abzuliefern. vorschläge gab's ja einige, warum nicht mal ausprobieren. 😉

    dotys kommilitone schrieb:

    nicht soo schwer zu verstehen oder? 🙄

    solche sprüche animieren unglaublich zum helfen, denk mal drüber nach.


Anmelden zum Antworten