mikrocontroller.net

Forum: PC-Programmierung getch() Funktion


Autor: Tobias H. (dexiv)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab ein Programm geschrieben das thoeretisch Rechnen kann indem man 
nur Zahlen und Zeichen eingibt ohne Bestätigen aber das funktioniert 
nicht ich dank mal es liegt an getch().Hab schon alles ausprobiert.

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

int main(int argc, char *argv[])
{
    char Eingabe;
    int sv = 0;
    long b = 1;
    long speichern [998];
    char zahlen [998];
    long long ergebnis = 0;
    short i = 0;
    int zaehle = 0;


    for (;i != 999;)
    {
      zahlen[i] = 0;
      speichern[i] = 0; /*alle arrives auf null*/
      i++;
    }
    i = 0;

    for (;;) /*Eingabe*/
    {

       i = getch();

            if (i != 61)
            {
                zahlen[zaehle] = i;
                zaehle++;
                i=0;
            }



        else
        {
            break;
        }
    }
    i=0;

    for (;i != ++zaehle;) /*Sortierschleife*/
    {
        if ((zahlen[i] <= 9)&(zahlen[i] >= 0))
        {
            speichern[sv] = zahlen[i] * b;

            if (b == 1)
            {
                b += 9;
            }
            else
            {
                b *= 10;
            }
        i++;
        }
        else if (zahlen[i] == 43) /*Plus*/
        {
            sv++;
            speichern[sv] = 43;
            sv++;
            i++;
            b = 0;
        }

        else if (zahlen[i] == 45)/*Minus*/
        {
            sv++;
            speichern[sv] =45;
            sv++;
            i++;
            b = 0;
        }

        else if (zahlen[i] == 42) /*Mal*/
        {
            sv++;
            speichern[sv] =42;
            sv++;
            i++;
            b = 0;
        }

        else if (zahlen[i] == 47) /*Geteilt*/
        {
            sv++;
            speichern[sv] =47;
            sv++;
            i++;
            b = 0;
        }

        else /*Credits xD*/
        {
            printf ("Was habe sie gemacht !!! \nKeine Buchstaben eingeben das hier ist ein Rechner !!!\n\n\nManager: Tobias\n\nProgammierer: Tobias\n\nDesign: Gibts ja wohl noch keins oder ?!? O_o");

            return EXIT_FAILURE;
        }

    }

    i = 1;

    ergebnis = speichern[0];


    for (;i != ++sv;) /*Ausrechnen*/
    {
       if (speichern[i] == 43)
       {
           i++;
           ergebnis += speichern[i];
           i++;
       }

       else if (speichern[i] == 45)
       {
           i++;
           ergebnis -= speichern[i];
           i++;
       }

       else if (speichern[i] == 42)
       {
           i++;
           ergebnis *= speichern[i];
           i++;
       }

       else if (speichern[i] == 47)
       {
           i++;
           ergebnis /= speichern[i];
           i++;
       }

      else /*Credits xD*/
        {
            printf ("Was habe sie gemacht !!! \n Keine zwei Rechenzeichen hintereinander eingeben !!!\n\n\nManager: Tobias \n\nProgammierer: Tobias \n\nDesign: Gibts ja wohl noch keins oder ?!? O_o");

            return EXIT_FAILURE;
        }
    }

    printf (" = %d ",ergebnis);
    return EXIT_FAILURE;
}

Wer hilft kriegt Ehrenplatz in Credits ;)

PS: Mein Compiler ist Code::Blocks und ich hab Windows 7

Autor: nichtsKönner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
was passiert denn?
was funktioniert/funktioniert nicht?

Autor: 900ss D. (900ss)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tobias H. schrieb:
> aber das funktioniert
> nicht

Dann geh auf Optionen und stell von "funktioniert nicht"
auf "funktioniert" ;-)

Im Ernst, das ist keine Fehlerbeschreibung. Was funktioniert denn nicht?

Was ich so beim überfliegen gefunden habe:
Prüfe nochmal nach, wie lang dein Array wird mit
> char zahlen [998];

Und ob du hier die richtige mit deiner Indexvariablen immer das Array 
"triffst" oder evtl. mal ausserhalb landest (was evtl. zu einem Absturz 
führen kann, nicht muss.).
> short i = 0;
>     for (;i != 999;)

Hier benutzt du ein '&' was ein "bitwise and" ist. Du möchtest aber ein 
"logic and" haben.
>if ((zahlen[i] <= 9)&(zahlen[i] >= 0))

Um eine Prüfung auf ein großes A zu machen kannst du statt 61 auch 'A' 
benutzen (mit dem ' davor und dahinter). Das macht das Programm 
lesbarer. Ein Fehler ist es mit 61 aber nicht.
>if (i != 61)

Genauso hier kannst du '+' benutzen.
>else if (zahlen[i] == 43) /*Plus*/

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was auch immer du da geschrieben hast:

SChmeiss es weg und fang nochmal an.
Aber diesmal:
Arbeite in Schritten. Teile dir die komplette Aufgabe in Teilaufgaben 
auf. Implementiere diese Teilaufgabe und dann teste diese ordentlich. 
Erst dann, wenn eine Teilaufgabe funktioniert, gehst du die nächste 
Teilaufgabe an.
Am besten ist es, wenn du für jede Teilaufgabe eine eigene Funktion 
machst, die nur diese eine Teilaufgabe löst. Wenn eine Teilaufgabe 
kompliziert ist, kann man auch diese wieder ein einfachere Einzelteile 
zerlegen.

Unmengen von Code zu schreiben, der schon von Anfang an nicht 
funktioniert bringt nichts. Du stehst dann da mit ... Unmengen nicht 
funktionierendem Code und hast keine Ahnung, wo du mit der Fehlersuche 
anfangen sollst.


Und ja. Ich meine das wirklich ernst. Schmeiss das weg und fang nochmal 
an. Was du da hast ist, freundlich ausgedrückt, ein grosser Haufen Müll. 
Im Moment sieht das aus, als ob du dich da kräftig übernommen hast.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mal wieder ein Thread ohne sinnvolle Antworten!

@Tobias:
Ja, das liegt an getch().
Das ist ein altbekanntes Problem. Am besten an Microsoft melden.

Autor: Tobias H. (dexiv)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok aber wenns an getch liegt kann mir dann jemand sagen obs eine 
"Ausweichmöglichkeit" gibt ??


PS:Danke für die schnellen Antworten

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum meinst Du, dass es an getch() liegen soll?  Glaubst Du, dass 
Microsoft und/oder Dein Compilerhersteller einen so schlechten Job 
gemacht haben, das es seine Spezifikationen nicht einhält?  Und dass das 
außer Dir noch niemandem aufgefallen ist?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tobias H. schrieb:
> Ok aber wenns an getch liegt kann mir dann jemand sagen obs eine
> "Ausweichmöglichkeit" gibt ??

Es liegt nicht am getch()
Klaus wollte dich auf den Arm nehmen.

Das dein Programm generell nicht funktionert, liegt daran, dass es so 
geschrieben ist, dass es noch nicht einmal ansatzweise funktionieren 
kann.
Du bist weit, weit weg von einer auch nur ansatzweisen rudimentären 
Lösung deiner Aufgabenstellung.

Dein Programm ist das C-Äquivalent zu HaPe Kerkeling, wenn er Russisch 
'spricht'. Es sieht zwar so aus wie, ist aber in Wirklichkeit kompletter 
Kauderwelsch.


Klingt vielleicht hart, ist aber die ungeschminkte Wahrheit.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.