Kleine Probleme mit C

Tutorials.at
Verfügbare Informationen zu "Kleine Probleme mit C"

  • Qualität des Beitrags: 0 Sterne
  • Beteiligte Poster: smogpaster - Dubbel - exbs - Dirty Oerty - DrPhil_Guth
  • Forum: Tutorials.at
  • Forenbeschreibung: Programmierforum
  • aus dem Unterforum: C / C++
  • Antworten: 35
  • Forum gestartet am: Mittwoch 19.04.2006
  • Sprache: deutsch
  • Link zum Originaltopic: Kleine Probleme mit C
  • Letzte Antwort: vor 17 Jahren, 1 Monat, 8 Tagen, 20 Stunden, 13 Minuten
  • Alle Beiträge und Antworten zu "Kleine Probleme mit C"

    Re: Kleine Probleme mit C

    smogpaster - 18.03.2007, 12:00

    Kleine Probleme mit C
    hallo, habe ein paar kleiner Probleme mit C.
    Bin noch neu, aber versuche fleißig zu lernen.
    Also, mein Ziel ist es, ein relativ einfaches C Programm zu schreiben, welches sich die Ergebnisse eines Skat Spieles merkt, und diese addiert.

    Mein erstes kleines Problem:
    1. Wie um alles in der Welt bringt man den Compiler dazu eine Leerzeile nach einem printf befehl einzufügen?
    2. Ich schreibe hier mal den bisherigen Code rein, den ich habe, is noch nicht recht viel, aber das Problem ist, dass das program den wert, welchen man vorher eingegeben hat, mit dem wert, welchen man nach dem letzten Spiel eingibt, addieren soll. Nur kommt da bei mir IMMER eine Zahl raus, die absolut unmöglich ist, warum???

    Also hier der Code:

    int main()
    {
    int petra, peter, reiner, wert, spiel=1;
    printf ("Geben sie bitte das letzte Ergebnis für Petra ein:");
    scanf ("%d",&petra);
    printf ("Geben sie bitte das letzte Ergebnis für Reiner ein:");
    scanf ("%d",&reiner);
    printf ("Geben sie bitte das letzte Ergebnis für Peter ein:");
    scanf ("%d", &peter);
    printf ("jetzt kommt das: %d. Spiel", spiel);
    printf ("Petras Ergebnis vom letzten Spiel:");
    scanf ("%d, wert");
    printf ("Petras Ergebnis: %d", (petra + wert));

    getch();
    return 0;
    }


    Wäre froh, wenn man mir helfen könnte.

    Danke schonmal,
    Gruss,
    Smogpaster



    Re: Kleine Probleme mit C

    Dubbel - 18.03.2007, 12:07


    Zitat: 1. Wie um alles in der Welt bringt man den Compiler dazu eine Leerzeile nach einem printf befehl einzufügen?
    2. Ich schreibe hier mal den bisherigen Code rein, den ich habe, is noch nicht recht viel, aber das Problem ist, dass das program den wert, welchen man vorher eingegeben hat, mit dem wert, welchen man nach dem letzten Spiel eingibt, addieren soll. Nur kommt da bei mir IMMER eine Zahl raus, die absolut unmöglich ist, warum???


    Also eine Leerzeile geht mit \n also
    Code: prinf ("Lalala\nbesucht alle meine Homepage!");

    Jetzt nur als Beispiel :lol: Aber "besucht alle meine Homepage!" wäre in einer neuen Zeile

    zu deinem anderen Problem:

    1. Hast du bei: Code: scanf ("%d, wert"); das & vergessen.

    Richtig wäre:
    Code: scanf ("%d,&wert");

    Vllt ist noch irgendwas anderes falsch, aber beim ersten Blick ist mir sonst nix aufgefallen...



    Re: Kleine Probleme mit C

    smogpaster - 18.03.2007, 12:27


    Mein Quellcode sieht jetzt so aus:


    int main()
    {
    int petra, peter, reiner, wert, spiel=1;
    printf ("Geben sie bitte das letzte Ergebnis für Petra ein:");
    scanf ("%d",&petra);
    printf ("Geben sie bitte das letzte Ergebnis für Reiner ein:");
    scanf ("%d",&reiner);
    printf ("Geben sie bitte das letzte Ergebnis für Peter ein:");
    scanf ("%d", &peter);
    printf ("jetzt kommt das: %d. Spiel\n", spiel);
    printf ("Petras Ergebnis:");
    scanf ("%d, &wert");
    printf ("Petras Ergebnis: %d", petra + wert);

    getch();
    return 0;
    }



    Danke für das mit den Leerzeilen, das funktioniert jetzt aber der Rest immer noch nicht.

    Und zwar fragt er mich jetzt zwar nach einem Wert, jedoch, ich kann eingeben was ich will, er addiert zum Ergebnis von petra immer 4564 dazu, statt dem Wert, den man eingibt und wie er darauf kommt, weiß er wahrscheinlich selbst nicht.
    Achja, turboC gibt noch ne Fehlermeldung aus:

    possible use of "wert" before definition in function main

    kann jemand was damit anfangen?





    Danke,
    Gruss,
    smogpaster



    Re: Kleine Probleme mit C

    smogpaster - 18.03.2007, 12:35


    Hab Fehler gefunden:

    int main()
    {
    int petra, peter, reiner, wert, spiel=1;
    printf ("Geben sie bitte das letzte Ergebnis für Petra ein:");
    scanf ("%d",&petra);
    printf ("Geben sie bitte das letzte Ergebnis für Reiner ein:");
    scanf ("%d",&reiner);
    printf ("Geben sie bitte das letzte Ergebnis für Peter ein:");
    scanf ("%d", &peter);
    printf ("jetzt kommt das: %d. Spiel\n", spiel);
    printf ("Petras Ergebnis:");
    scanf ("%d, &wert");
    printf ("Petras Ergebnis: %d", petra + wert);

    getch();
    return 0;
    }

    So ein kleines verflixtes Anführungszeichen.

    Naja, kennt man ja.
    Aber warum er vorher 4564addierte weiß auch keiner.

    Danke nochmal.

    gruss,
    Smogpaster[/u][/i]



    Re: Kleine Probleme mit C

    exbs - 18.03.2007, 13:32


    versuche doch mal vor jeder scaanf-anweisung den eingabepuffer zu leeren ...

    Code: setvbuf(stdin,NULL,_IONBF,0);
    setvbuf(stdin,NULL,_IOFBF,BUFSIZ);



    Re: Kleine Probleme mit C

    smogpaster - 18.03.2007, 14:01


    es funktioniert doch jetzt.


    gruss,
    Smogpaster



    Re: Kleine Probleme mit C

    Dirty Oerty - 18.03.2007, 14:25


    aber wenn du z.b. 347892347892367 eingibst, dann wird es nicht mehr funktionieren, oder?



    Re: Kleine Probleme mit C

    smogpaster - 18.03.2007, 16:13


    in der tat. Aber wer kriegt beim Skat schon über ein paar billiarden punke??? ^^

    Gruss,
    Smogpaster



    Re: Kleine Probleme mit C

    Dirty Oerty - 18.03.2007, 17:36


    aber sicherer ist es auf jedenfall.
    falls nen prog, das vorher gelaufen is, nicht sauber beendet hat.

    oder falls sich der benutzer deines programmes lustig findet und punkte von über 2342907834758347535 eingibt :wink:



    Re: Kleine Probleme mit C

    exbs - 18.03.2007, 18:05


    Wie würdest du das denn absichern ? ;)



    Re: Kleine Probleme mit C

    smogpaster - 18.03.2007, 18:09


    stimmt, wie würde man das absichern?


    Gruss,
    smogpaster



    Re: Kleine Probleme mit C

    Dirty Oerty - 18.03.2007, 18:37


    mit deinem code da oben, exbs :roll: :wink:

    hat zumindest bei mir funktioniert :D



    Re: Kleine Probleme mit C

    smogpaster - 18.03.2007, 18:44


    ahh



    Re: Kleine Probleme mit C

    exbs - 18.03.2007, 20:46


    ich gluabe wir haben an einander vorbei geredet ;) ...

    ich meinte wie willst du absichern, dass der benutzer keine zu grosse zahl eingibt ? (so hatte ich dich zumindest verstanden) ... mein code löscht ledigtlich den eingabepuffer.



    Re: Kleine Probleme mit C

    smogpaster - 18.03.2007, 21:02


    jo, "Bitte geben sie keine Zahl ein, die größer als eine Fantastilliarde ist" ^^



    Re: Kleine Probleme mit C

    DrPhil_Guth - 18.03.2007, 21:27


    do
    {
    printf ("Geben sie ein zahl zwischen %d und %d ein: \n", groeste_zahl, kleinste_zahl);

    scanf("%d", &eingabe);
    wie_auch_immer_puffer_loeschen();
    }
    while ( (eingabe < kleinste_zahl) || (eingabe > groeste_zahl) )



    Re: Kleine Probleme mit C

    Dirty Oerty - 18.03.2007, 23:09


    ich glaub exbs meint eher, wei man sich vor nem überlauf schützt...

    aber: mit dem puffer leeren is dann bei mir schluss, also, man kann eingeben was man will (zumindest an zahlen), aber nen überlauf bekomm ich dann nicht.
    lass ich deine fct weg, dann bekomm ich nen überlauf...

    um vollkommen sicher zu sein, müsste man zuerst in nen char-array einlesen, und den dann auswerten...is halt komplizierter.



    Re: Kleine Probleme mit C

    exbs - 18.03.2007, 23:46


    den püffer leere ich ja nur, weil sonnst scnaf spinnen könnte.

    das mit dem überlauf lässt sich dummerweise schlecht prüfen, weil wie soll ich denn die zahl prüfen wenn sie nirgendwo draufpasst ... mit dem char array wäre eine möglichkeit ... nur wie du ja selber sagst, kompliziert ...

    vlt könnte man sich da ne coole fkt erarbeiten.



    Re: Kleine Probleme mit C

    DrPhil_Guth - 19.03.2007, 00:01


    Ne frage...

    Also was genau wollt ihr überprüfen?

    Was gibts denn da für überläufe?

    Die gefahr mit scanf() ist durch exbs methode gebannt.
    Was genau heißt "nirgendwo draufpasst" ?
    Meinst du in den Wertebereich von int? Dann gibts aber keinen speicherüberlauf, sondern "der wert dreht ein paar runden", und es kommt irgend ein wert raus.

    Und außerdem: ein ganz klein wenig verantwort kann/muss man dem user zutrauen. Zumindest, wenn man scanf(); benutzt ;-)



    Re: Kleine Probleme mit C

    exbs - 19.03.2007, 00:06


    Zitat: Meinst du in den Wertebereich von int? Dann gibts aber keinen speicherüberlauf, sondern "der wert dreht ein paar runden", und es kommt irgend ein wert raus. Genau darum ging es ... die eingabe dahingehend abzusichern, dass man bei einer zu "hohen" eingabe (mehr als max_int) eine fehlermeldung kommt. nur kenn ich mich in der richtung mit c net aus, was die laufzeitfehlerbehandllung angeht.

    Zitat: Und außerdem: ein ganz klein wenig verantwort kann/muss man dem user zutrauen. Zumindest, wenn man scanf(); benutzt ;) ... bist du dir da wirklich sicher...



    Re: Kleine Probleme mit C

    DrPhil_Guth - 19.03.2007, 00:11


    Nein, hast recht, sollte man nicht.

    Das ist genau wieder einer der blöden probleme in C...

    Wär aber wirklich interessant, wie man das problem lösen könnte. Ich denke "Laufzeitfehlerbehandlung in C" ist das richtige Stichwort.
    Findet jemand was in die richtung?
    Es geht darum, dass eine eingabe über den MAX_INT wert einen bestimmten laufzeitfehler auslösen sollte, den man dann mit irgend einer funktion abfragen muss. Erstens, löst das wirklich so einen laufzeitfehler aus, und zweitens, wie könnte man das in erfahrung bringen?



    Re: Kleine Probleme mit C

    exbs - 19.03.2007, 00:16


    Zitat: wie könnte man das in erfahrung bringen? Soetwas lässt sich sicher nur von system zu system realisieren. ich denke mal, dass die WinApi da was bereit hält ... zum bsp: GetLastError() würde mir spontan einfallen (beispiel 2 ... sieht sehr vielversprechend aus), aba ob damit diese laufzeitfehler auch abgedekt sind, kA.



    Re: Kleine Probleme mit C

    Dirty Oerty - 19.03.2007, 15:12


    allerdings kanns sehr oft passieren, das dir wegen nem überlauf das programm hops geht.
    also hilft die im programm integrierte "rettungsfct" nix, man bräuchte nen kontrollprogramm...oder so.

    aber das mit der eingabe in nen char, da setz ich mich mal drüber :wink:



    Re: Kleine Probleme mit C

    smogpaster - 19.03.2007, 16:02


    mal schnell ne andere Frage, was für ne Art von Variablen muss ich einsetzt für Komma zahlen, also z.B. 0,2?

    Danke,
    Smogpaster



    Re: Kleine Probleme mit C

    DrPhil_Guth - 19.03.2007, 16:11


    float oder double.

    float für kleinere zahlen, double für größere



    Re: Kleine Probleme mit C

    smogpaster - 19.03.2007, 18:02


    Hmmja, also so ungefähr?:

    int main()
    {
    float pwert, gwert, zwert, awert;
    printf ("Willkommen im Ebay Abrechnungsprogramm, Version 0,5.");
    getch();
    clrscr();
    printf ("Bitte geben sie ein, wieviel Prozent vom Gesamtpreis berechnet werden sollen:");
    scanf ("%d", &pwert);
    printf ("Wieviele Artikel sollen berechnet werden?\n");
    scanf ("%d", &awert);

    if (awert == 1)

    clrscr();

    printf ("Bitte geben sie den Verkaufspreis des Artikels an:");
    scanf ("%d", &zwert);
    (gwert = (pwert/100)*zwert);
    printf ("Das waeren dann:%d", gwert);

    getch();



    }

    Das funktioniert aber mal wieder nicht, denn er gibt mir als gwert immer 0 aus.

    Hilfe!!! ^^

    Gruss,
    Smogpaster



    Re: Kleine Probleme mit C

    Dirty Oerty - 19.03.2007, 18:40


    ich versuch mich mal:

    Code:

    int main (void)
    {
    float prozent,preis,gesamtpreis,anzahl;
    printf ("Willkommen im Ebay Abrechnungsprogramm.");
    getch();

    clrscr();
    printf ("Bitte geben sie ein, wieviel Prozent vom Gesamtpreis berechnet werden sollen:");
    scanf ("%d", &prozent);
    printf ("Wieviele Artikel sollen berechnet werden?\n");
    scanf ("%d", &anzahl);

    clrscr();
    printf ("Bitte geben sie den Verkaufspreis des Artikels an:");
    scanf ("%d", &preis);
    gesamtpreis = anzahl * preis;
    gesamtpreis = gesamtpreis * (prozent/100);

    printf ("Das waeren dann:%d", gesamt);
    getch();
    return EXIT_SUCCESS;
    }

    is aber nich getestet.



    Re: Kleine Probleme mit C

    smogpaster - 19.03.2007, 21:58


    funktioniert leider auch nicht, ist im Grunde ja das gleich, was ich auch schon geschrieben habe, woran kann das liegen????

    Hmm,ich habe es mir selbst schon sehr oft angeschaut kann aber auch keinen Fehler entdecken.


    Vielleich findet jemand anderes einen.

    Gruss,
    Smogpaster



    Re: Kleine Probleme mit C

    Dirty Oerty - 19.03.2007, 22:28


    ich hab bei dir nur gesehn, das es unvollständig war (wenn ich den sinn des progs begriffen hab, dann müsste meins vollständig sein)
    und die if-anweisung: da müssen {}klammern rum, sind ja mehr als 1 anweisung, die im true-fall ausgeführt werden müssen.
    achja: warum machst du das::


    Zitat: (gwert = (pwert/100)*zwert);

    ?? die klammern rum sind doch quatsch, oder nich?
    also die äußersten klammern.

    lg
    daniel



    Re: Kleine Probleme mit C

    exbs - 19.03.2007, 22:50


    hab net alles gelesen ... aba es sollte anstatt %d(ezimal) ;) ... heissen %f(loat) ... wenn du schon kommerzahlen hast.



    Re: Kleine Probleme mit C

    exbs - 19.03.2007, 22:53


    Zitat: aber das mit der eingabe in nen char wie würdest du das dann denn testen?



    Re: Kleine Probleme mit C

    Dirty Oerty - 19.03.2007, 23:12


    nunja, ich würde nat erstmal testen, ob buschstaben drin vorkommen und dann nen fehler zurückgeben lassen.

    dann mal gucken:

    bsp:

    "342"

    durchlesen,

    wie viele ziffern? => 3

    =>
    1.ziffer * 10^(3-1) = 1.ziffer * 100 = 300

    +

    2.ziffer * 10^(3-2) = 2.ziffer * 10 = 40

    +

    3.ziffer * 10^(3-3) = 3.ziffer * 1 = 2


    ===> 342


    (genaueres morgen, bin schon müd...)



    Re: Kleine Probleme mit C

    DrPhil_Guth - 19.03.2007, 23:18


    cool, dafür hab ich schon ne funktion geschrieben! Oder nein, die funktion funktionierte eher umgekehrt, die hat aus ner zahl nen string gemacht...

    Egal, hier hab ich ein, die prüft, wieviele stellen eine zahl hat. Vielleicht nützts ja was...
    x ist die zahl, base ist im dezimalen zahlensystem 10.

    Code:
    unsigned int get_num_digits (int x, unsigned int base)
    {
       double x_temp;
       x_temp = x;


       unsigned int num_digits = 1;

       float base_float;
       base_float = base;


       do
       {
          x_temp = x_temp / base_float;

          if ( fabs(x_temp) < 1)
             break;

          num_digits++;
       }
       while(TRUE);

       return num_digits;
    }


    Übrigens, deine funktion gibts schon:

    atoi();

    oder eben atof(); weils ja sonst wieder nen überlauf geben würde.

    Hm, dann könnte der user allerdings auch werte außerhalb des float wertebereiches angeben... Meine güte das ist kompliziert. Ich kann so spät nicht mehr denken...



    Re: Kleine Probleme mit C

    smogpaster - 20.03.2007, 00:05


    So, hab mich nochmal drangesetzt.

    Das hier ist nun der richtige Code:



    int main (void)
    {
    float prozent,preis,preis2,gesamtpreis,anzahl;
    printf ("Willkommen im Ebay Abrechnungsprogramm.");
    getch();

    clrscr();
    printf ("Bitte geben sie ein, wieviel Prozent vom Gesamtpreis berechnet werden sollen:");
    scanf ("%f", &prozent);
    printf ("Wieviele Artikel sollen berechnet werden?\n");
    scanf ("%f", &anzahl);

    if (anzahl == 1)
    {
    clrscr();

    printf ("Bitte geben sie den Verkaufspreis des Artikels an:");
    scanf ("%f", &preis);
    gesamtpreis = preis * (prozent/100);

    printf ("Das waeren dann:%f", gesamtpreis);}

    if (anzahl == 2)
    {clrscr();

    printf ("Bitte geben sie den Verkaufspreis des ersten Artikels an:");
    scanf ("%f", &preis);
    clrscr();
    printf ("Bitte geben sie den Verkaufspreis des zweiten Artikels an:");
    scanf ("%f", &preis2);
    gesamtpreis = (preis + preis2) * (prozent/100);
    printf ("Das waeren dann:%f", gesamtpreis);}














    getch();
    }


    Wie ihr seht habe ich nur alle %d´s durch %f´s ersetzt, und es hat geholfen ^^.

    Und meine zweite if Schleife ist auch noch drin.
    Die nächsten 10 kommen noch, falls wen interessiert.

    Mit freundlichen Grüßen, und danke für die abermalige Hilfe,
    Smogpaster



    Re: Kleine Probleme mit C

    Dirty Oerty - 20.03.2007, 15:08


    atoi/atof

    find ich nich so toll, da weß ich nich, was drin is.
    ne, vorallem könnte man bei ner eigenen fct noch so "extras" einfügen, wie das z.b. unterschiedliche zahlensysteme genommen werden können, oder das man einfache oder auch schwerere gleichungen reinschreiben kann und man das ergebnis bekommt oder oder oder....

    und werte auserhalb des bereichs kann man da ja abfangen, z.b. wenns zu viele stellen sind oder wenn die erste zahl zu groß is... sollte nich allzu schwer sein.



    Mit folgendem Code, können Sie den Beitrag ganz bequem auf ihrer Homepage verlinken



    Weitere Beiträge aus dem Forum Tutorials.at

    GUI mit BASIC - gepostet von BASIC am Mittwoch 09.08.2006
    Html tutorial - gepostet von Pole am Donnerstag 28.12.2006
    programm fertig und nun? - gepostet von DarkJiN am Donnerstag 09.08.2007
    Eigene Programme - gepostet von vpascal am Mittwoch 04.04.2007
    Quersumme errechnen - gepostet von rattenfan am Sonntag 28.01.2007
    Robot Carol - gepostet von Dragorad am Mittwoch 25.10.2006
    ´Frage zu schleife - gepostet von dani93 am Dienstag 20.11.2007
    Fahler meldung - gepostet von el_bandito21 am Freitag 07.07.2006



    Ähnliche Beiträge wie "Kleine Probleme mit C"

    mehr Platz = Probleme? - Emelie (Donnerstag 12.07.2007)
    Aschenbecher - AERO 964 (Dienstag 12.10.2010)
    GPZ 600R: Probleme mit dem Motor! - sparks61 (Montag 13.08.2007)
    Asinueh: Kleine Jägerin, große weite Welt - Asinueh (Donnerstag 12.07.2007)
    Der kleine Prinz - Lynn (Freitag 13.05.2005)
    Gpx 600r Probleme mit Motor - Andi_1988 (Samstag 18.08.2007)
    Probleme mit meiner E-Mail Adresse - nordseeengel (Donnerstag 14.07.2005)
    Probleme mit CNC-Deluxe Alu Rotorkopf - wowi (Montag 29.10.2007)
    Probleme im Forum - Akanara (Sonntag 11.04.2004)
    Sperren und probleme bei GW - Der Hunter Jazon (Donnerstag 12.07.2007)