Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 20 von 21

Thema: Mein C/C++ - Frage-Thread...

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1

    Mein C/C++ - Frage-Thread...

    Habe mir den Dev-C++ besorgt und folgenden Code compiliert:
    Code:
    /* ein Programm, das zwei Zahlen addiert */
    main()
    {
          int a, b, c;
          a = 3;
          b = 4;
          c = a + b;
          printf("%10d", c);
    }
    Muss da noch irgendwas hin? Bin diesbezueglich totaler N00b.
    Ganz kurz flackert ein Fenster auf und verschwindet dann sofort. (Beim Versuch die Compilierte Datei auszuführen...)

    Demnaechst mehr fragen

  2. #2
    Das ist ein Kommandozeilen-Programm (grafische Programmierung ist um einiges schwerer als Kommandozeile). Wenn du es aus der grafischen Oberfläche von Windows ausführst, öffnet sich eine Kommandozeile, in der das Programm ausgeführt wird. Allerdings schließt sie sich wieder, sobald die Ausführung beendet ist.
    Lösungen:
    - Programm auf Kommandozeile ausführen
    - als letzte Zeile in die Funktion main system("pause"); anhängen. Das ist ein System-Call, mit dem Windows vor dem Beenden des Programms auf einen Knopfdruck wartet. Damit ist dein Programm allerdings nicht mehr protabel.

  3. #3
    Zitat Zitat
    Programm auf Kommandozeile ausführen
    ehrlich gesagt weis ich nicht wirklich was du damit meinst...

    Zitat Zitat
    system("pause");
    Funktioniert einwandfrei.
    Kann es durch die Benutzung des Befehls zu irgendwelchen Problemen kommen?

    Wie macht man, dass die Nachricht "Drücken Sie eine beliebige Taste . . ." eine Zeile nach unten verschoben wird?

  4. #4
    Zitat Zitat von Niji-chan
    ehrlich gesagt weis ich nicht wirklich was du damit meinst...
    Das Programm wird eben in der Konsole (MSDos Eingabeaufforderung; idR: xwindows\system32\cmd.exe) ausgeführt.

    Zitat Zitat von Niji-chan
    Funktioniert einwandfrei.
    Kann es durch die Benutzung des Befehls zu irgendwelchen Problemen kommen?
    Eigentlich nicht. Das Programm ist, wie schon gesagt wurde, nicht portabel. Aber das sollte für einen Programmieranfänger erstmal nicht sonderlich schlimm sein.
    Zitat Zitat von Niji-chan
    Wie macht man, dass die Nachricht "Drücken Sie eine beliebige Taste . . ." eine Zeile nach unten verschoben wird?
    Indem du vorher einen Zeilenumbruch ausgibst. Also printf("\n");. Oder direkt in deiner Ausgabe:
    Code:
          printf("%10d\n", c);
    freundliche Grüße, Rolus

  5. #5
    Danka schon mal

    Weitere Frage:
    Da ich mit einem alten Buch arbeite (Der Einstieg in C, ISBN: 3890900860), dass sogar noch von raumfüllenden Rechnern spricht und die heutzutage "normalen" PCs als Kleincomputer bezeichnet, frage ich mich, ob es daran liegen mag, dass folgendes Programm einen Fehler auswirft:
    Code:
    /* Ein einfaches Programm mit Tastatureingabe */
    main()
    {
          char buf[10];
          int sum, zahl_1, zahl_2;
          zahl_1 = atoi(fgets(buf,10,stdin));
          zahl_2 = atoi(fgets(buf,10,stdin));
          sum = zahl_1 + zahl_2;
          printf("%10d",sum);
          printf("\n");
          system("pause");
    }
    Zitat Zitat
    C...\C Programmieren lernen\Abbildung3.c In function `main':
    6 C...\C Programmieren lernen\Abbildung3.c `stdin' undeclared (first use in this function)
    (Each undeclared identifier is reported only once
    for each function it appears in.)
    Soweit ich das verstehe liegt es an dem "stdin", dass so einfach angegeben wurde. (Ich habe nach Buchanweisung gearbeitet... ok, is abgeschrieben )

  6. #6
    Afaik muss oben in der Datei #include <stdio.h> stehen (hab mich nie wirklich mit C beschäftigt). Steht das da?
    (Die Datei enthält Implementierungen der Standard-Ein- und Ausgaben, also u.A. stdin).

  7. #7
    Wohin gehört denn das dann und 2. muss ich die jeweilige Datei dann im gleichen Ordner haben?
    Beim 1.Versuch kamen wieder nen Haufen von Fehlermeldungen...
    Notfalls kann ich ja auch mit scanf arbeiten, klappt nämlich ganz gut.

  8. #8
    Die Include-Anweisung solltest du ganz an den Anfang schreiben. Und die Datei muss nicht im gleichen Ordner liegen. Jeder normale C-Compiler hat die stdio.h bei seinen Include-Dateien und findet sie auch.

    freundliche Grüße, Rolus

  9. #9
    danke, hat geklappt.

    Jetzt stehe ich vor einer Aufgabenstellung, die ich nicht so ganz verstehe...
    Zitat Zitat
    Schreiben Sie ein Programm, das die Fakultät von 5 errechnet. Diese ist definiert als:
    5 * 4 * 3 * 2 * 1
    Was zum Henker ist eine solche Fakultät?
    Ich frage mich jetzt, ob damit nun einfach bloß "x=5*4*3*2*1" gemeint ist, oder ob da mehr hinter steckt...?

  10. #10
    Zitat Zitat von Niji-chan
    Was zum Henker ist eine solche Fakultät?
    Ich frage mich jetzt, ob damit nun einfach bloß "x=5*4*3*2*1" gemeint ist, oder ob da mehr hinter steckt...?
    Nö, mehr steckt nicht dahinter. Die mathematische Fakultät einer Zahl erhält man in der Tat, indem man die Zahlen von 1 aufwärts bis zur Zahl miteinander multipliziert. Also Fakultät von 3 = 1 * 2 * 3. Manchmal sind Mathematiker halt etwas .. eigenartig, zumindest was die Benennung einiger Dinge betrifft.

    freundliche Grüße, Rolus

  11. #11
    Ich denke aber mal, dass du nicht einfach x = 5*4*3*2*1; schreiben sollst, sondern eine Funktion, die das für dich macht. So dass man x = fakultaet(4); oder x = fakultaet(5); oder x = fakultaet(1337); schreiben kann.

    Wobei es in <cmath> sicher schon eine passende Funktion gibt..

  12. #12
    warum soll dadie gebannt werden?

    Bei Funktionen bin ich noch nicht angekommen... Noch immer im 1.Kapitel ...
    bzw. bin ich mit dem 1.Kapitel jetzt durch und mache eine kleine Pause, bevor ich an "Elementare arithmetische Operationen" rangehe...
    hab Hunger.

    Nur noch ne kleine Frage:
    Bei
    Code:
    #include <stdio.h>
    main()
    {
          char buf[10];
          int erg, erg2, a, b, c, d;
          a = atoi(fgets(buf,10,stdin));
          b = atoi(fgets(buf,10,stdin));
          c = atoi(fgets(buf,10,stdin));
          d = atoi(fgets(buf,10,stdin));
          erg = (a + b) * (c + d);
          printf("%10d",erg);
          printf("\n");
          a = atoi(fgets(buf,10,stdin));
          b = atoi(fgets(buf,10,stdin));
          c = atoi(fgets(buf,10,stdin));
          erg = (a - b) * (c + a + b);
          printf("%10d",erg);
          printf("\n");
          a = atoi(fgets(buf,10,stdin));
          b = atoi(fgets(buf,10,stdin));
          erg2 = (erg + a) * (erg - b);
          printf("%10d",erg2);
          printf("\n");
          system("pause");
    }
    könnte ich stattdessen auch
    Code:
    #include <stdio.h>
    main()
    {
          char buf[10];
          int erg, a, b, c, d;
          a = atoi(fgets(buf,10,stdin));
          b = atoi(fgets(buf,10,stdin));
          c = atoi(fgets(buf,10,stdin));
          d = atoi(fgets(buf,10,stdin));
          erg = (a + b) * (c + d);
          printf("%10d",erg);
          printf("\n");
          a = atoi(fgets(buf,10,stdin));
          b = atoi(fgets(buf,10,stdin));
          c = atoi(fgets(buf,10,stdin));
          erg = (a - b) * (c + a + b);
          printf("%10d",erg);
          printf("\n");
          a = atoi(fgets(buf,10,stdin));
          b = atoi(fgets(buf,10,stdin));
          erg = (erg + a) * (erg - b);
          printf("%10d",erg);
          printf("\n");
          system("pause");
    }
    schreiben?

  13. #13
    Ja, sollte eigentlich gehen. Der Variable erg wird der neue Wert erst zugewiesen, sobald er aus dem alten errechnet wurde. Ist ja auch irgendwie logisch.
    PS: Dingsi's/Heiko's Sig-Bildchen ist echt fies. Erst recht der Name. Absolut nicht wahrheitsgetreu.

    freundliche Grüße, Rolus

  14. #14
    neues Prob:
    Code:
    /* ein Beispiel für einfache Stringmanipulation */
    #include <stdio.h>
    main()
    {
          char *daten;
          daten = alloc(81);
          printf("Geben Sie Ihren Namen ein\n");
          gets(daten);
          printf("Hallo ");
          puts(daten);
          printf("\nAuf Wiedersehen ");
          puts(daten);
          return 0;
          getchar();
    }
    da kommt folgendes
    Zitat Zitat
    C...\C Programmieren lernen\abbildung15.c In function `main':
    6 C...\C Programmieren lernen\abbildung15.c [Warning] assignment makes pointer from integer without a cast
    [Linker error] undefined reference to `alloc'
    6 CDokumente und Einstellungen\...\C Programmieren lernen\abbildung15.c ld returned 1 exit status
    was is da nich funktionsfaehig?

  15. #15
    der compiler scheint irgend ein problem mit der alloc-funktion zu haben. falls du vor hast, hauptsächlich c++ zu programmieren, würde ich mich gar nicht erst mit den alten c-pointerfunktionen auseinandersetzen. z.b. kann man in deinem beispiel ganz einfach mit der c++-klasse string arbeiten. ps: komisches buch hast du da

    siehe auch: http://www.volkard.de/vcppkold/die_klasse_string.html

  16. #16
    probiere es mal mit

    daten = (char*)malloc(81);

    GNU C kent scheinbar die funktion alloc nicht ...

    Und es ist eine gute Sache, sich it den alten C Pointern rumzuschlagen, da man die in C++ auch an allen ecken und enden braucht ...

  17. #17
    danke, hat funktioniert

    und ein neues Problem:
    Code:
    /* scanf1.c */
    #include <stdio.h>
    
    int main (void) {
       int i;               /* Ein ganzzahliger Datentyp */
       printf("Bitte geben Sie eine Zahl ein : ");
       scanf("%d",&i);      /* Wartet auf die Eingabe */
       printf("Die Zahl, die Sie eingegeben haben, war %d\n",i);
       getchar();
       return 0;
    }
    Wenn ich nach Eingabe der Zahl mit Enter bestätige, wird das Fenster sofort geschlossen und ich kann die darauf folgende Ausgabe nicht mehr zu lesen bekommen. Gibt es da noch eine andere Möglichkeit, als "system=("pause");"?

  18. #18
    Du könntest es mit der Kommandozeile versuchen:


    Start -> Ausführen... -> "cmd"

    Das öffnet ein Fenster mit einer Kommandozeile.
    Mit cd navigierst du in den Ordner, in dem dein Programm liegt, wobe du mit cd .. in den jeweils höher liegenden Ordner wechseln kannst (also von CWindows\ nach C).
    Wenn du im richtigen Ordner bist tippst du einfach den Dateinamen deines Programms ein, um es auszuführen.

  19. #19
    Das sich dein Fenster nach dem Drücken von Enter direkt schließt, könnte daran liegen, dass die Betätigung der Entertaste nach dem Bestätigen der Zahleneingabe noch im Tastaturpuffer vorhanden ist und somit dann an das getchar() weitergegeben wird, ohne das eine weitere Tastaturbetätigung abgewartet wird.
    Versuch mal folgendes: füge nach dem scanf die Zeilen

    Code:
    setvbuf(stdin,NULL,_IONBF,0);
    setvbuf(stdin,NULL,_IOFBF,BUFSIZ);
    ein, um den Tastaturpuffer zu leeren. Dann sollte das Fenster geöffnet bleiben, bis du erneut eine Taste drückst.

  20. #20
    Zitat Zitat von NiKrYss
    Das sich dein Fenster nach dem Drücken von Enter direkt schließt, könnte daran liegen, dass die Betätigung der Entertaste nach dem Bestätigen der Zahleneingabe noch im Tastaturpuffer vorhanden ist und somit dann an das getchar() weitergegeben wird, ohne das eine weitere Tastaturbetätigung abgewartet wird.
    Versuch mal folgendes: füge nach dem scanf die Zeilen

    Code:
    setvbuf(stdin,NULL,_IONBF,0);
    setvbuf(stdin,NULL,_IOFBF,BUFSIZ);
    ein, um den Tastaturpuffer zu leeren. Dann sollte das Fenster geöffnet bleiben, bis du erneut eine Taste drückst.
    warum so kompliziert?
    die funktion löst das problem auch: fflush(stdin);

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •