C-Anfängerfrage

Dieses Thema im Forum "C/C++" wurde erstellt von buli, 08.10.2006.

  1. buli

    buli Debianator

    Dabei seit:
    16.09.2006
    Beiträge:
    789
    Zustimmungen:
    0
    Ort:
    Essen/Ruhrgebiet
    Hallo!
    Ich hab grad angefangen, mich mit C zu beschäftigen.
    doch schon am Anfang steh ich auf dem Schlauch.
    Ich hab folgenden code aus meinem Büchlein kompiliert:

    Code:
    #include <stdio.h>
    
    int main()
    {
      int rechteck, laenge, breite;
    
      printf("Länge eingeben: ");
      scanf("%d", &laenge);
    
      printf("Breite eingeben: ");
      scanf("%d", &breite);
    
     rechteck = (laenge == breite);
    
      if (rechteck = 1)
    {
      printf("Es handelt sich um ein Rechteck!\n");
    }
      else if (rechteck = 0)
    {
      printf("Es handelt sich nicht um ein Rechteck!\n");
    }
    return 0;
    }
    Aber es wird immer nur die erste Bedingung ausgegeben, egal was ich im Programm eingebe.

    Dann hab ich den code wie folgt abgeändert:

    Code:
    #include <stdio.h>
    
    int main()
    {
      int laenge, breite;
    
      printf("Länge eingeben: ");
      scanf("%d", &laenge);
    
      printf("Breite eingeben: ");
      scanf("%d", &breite);
    
      if (laenge == breite)
    {
      printf("Es handelt sich um ein Rechteck!\n");
    }
      else if (laenge != breite)
    {
      printf("Es handelt sich nicht um ein Rechteck!\n");
    }
    return 0;
    }
    
    Und siehe da:
    es funzt.

    In der Zeile aus dem ersten code rechteck = (laenge == breite);
    sollen (laut Buch) die Variablen "laenge" und "breite" miteinander verglichen werden, und anschliessend das Ergebnis in der Variable "rechteck" gespeichert werden.
    wahr=1 und falsch=0 , oder nicht?

    Aber, warum funzt das nicht?
    Ich hab den code 1000 mal nach Schreibfehlern untersucht, und der compiler meckert auch nicht.
    Was kann da faul sein?
    Vll mein Buch?:think:
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. tavgm

    tavgm Doppel-As

    Dabei seit:
    20.09.2006
    Beiträge:
    123
    Zustimmungen:
    0
    Ort:
    Karlsruhe
    kann es sein das du was vergessen hast normal sieht sowas so aus

    also

    rechteck = (laenge == breite ? 1 : 0 );

    setzt setzt rechteck auf 1 wenn Bedingung wahr sonst 0

    Gruss tavgm
     
  4. buli

    buli Debianator

    Dabei seit:
    16.09.2006
    Beiträge:
    789
    Zustimmungen:
    0
    Ort:
    Essen/Ruhrgebiet
    Auch nix.
    Es handelt sich um ein Rechteck, es handelt sich um ein Rechteck, es handelt sich um ein Rechteck,...
    X(
     
  5. tavgm

    tavgm Doppel-As

    Dabei seit:
    20.09.2006
    Beiträge:
    123
    Zustimmungen:
    0
    Ort:
    Karlsruhe
    wieso hast du deine ifs nicht mit == gemacht ??
    Das ist ein Vergelichsoperator und der wird denke ich immer so gemacht.

    Gruss tavgm
     
  6. buli

    buli Debianator

    Dabei seit:
    16.09.2006
    Beiträge:
    789
    Zustimmungen:
    0
    Ort:
    Essen/Ruhrgebiet
    Weils genauso in meinem Buch stand!!!
    Zefix!

    Naja, jetzt gehts jedenfalls.

    Dank dir!
     
  7. tavgm

    tavgm Doppel-As

    Dabei seit:
    20.09.2006
    Beiträge:
    123
    Zustimmungen:
    0
    Ort:
    Karlsruhe
    dann stimmt da was in dem Buch net das definiert da einen neuen Vergleichsoperator ;)

    Gruss tavgm
     
  8. buli

    buli Debianator

    Dabei seit:
    16.09.2006
    Beiträge:
    789
    Zustimmungen:
    0
    Ort:
    Essen/Ruhrgebiet
    Das Buch ist von Stefan Heitsiek
    Verlag: bhv
    (nur, um anderen Leuten davon abzuraten)

    Da stehen noch einige Sachen drin, die irgendwie nicht zusammenpassen.
    Hat mich ne Menge Nerven gekostet.X(

    Ist zwar von 2002, aber ne Programmiersprache ändert sich doch nicht einfach so, oder?
     
  9. oBdA

    oBdA Mitglied

    Dabei seit:
    13.11.2002
    Beiträge:
    49
    Zustimmungen:
    0
    Hi,

    Du hast eindeutig auf die falsche Bedingung abgefragt. In Deinem Fall nicht ob die Variable rechteck den Wert 1 hat, sondern ob die Zuweisung rechteck = 1 erfuellt ist (und das ist sie). Soweit ich weisz kann man das unter C benutzen um Arrays mit Werten zu befuellen ohne zu wissen wie grosz der Index sein darf (kann mich aber auch irren).

    int i =0;
    while (a = wert)
    {
    i++
    }

    So, oder so aehnlich.

    Ein empfehlenswertes Buch: "Programmieren in C" von Kernighan, Ritchie

    Ansonsten: "Linux Programmers Guide", "The GNU C Library Reference Manual"
     
  10. #9 supersucker, 08.10.2006
    supersucker

    supersucker Foren Gott

    Dabei seit:
    21.02.2005
    Beiträge:
    3.873
    Zustimmungen:
    0
    Ich kenn das Buch nicht, aber ich kann mir nicht vorstellen, das da wirklich

    Code:
    if (rechteck = 1)
    Das ist nämlich einer der häufigsten Anfängerfehler und wäre sehr peinlich für den Author.

    Code:
    if (rechteck = 1)
    ist eine Zuweisung der Zahl 1 an rechteck und logischerweise immer wahr, weshalb man jedesmal in das if kommt.

    = Zuweisung
    == Test auf Gleichheit

    Und du bist dir sicher das in dem Buch wirklich nur ein "=" steht?

    Kann ich mir ehrlich gesagt kaum vorstellen, da das schon ein sehr grober und dazu noch offensichtlicher Schnitzer wäre...
     
  11. tavgm

    tavgm Doppel-As

    Dabei seit:
    20.09.2006
    Beiträge:
    123
    Zustimmungen:
    0
    Ort:
    Karlsruhe
    ich kann mir net vorstellen das der Kompiler sowas net anmeckert ...
     
  12. buli

    buli Debianator

    Dabei seit:
    16.09.2006
    Beiträge:
    789
    Zustimmungen:
    0
    Ort:
    Essen/Ruhrgebiet
    So wahr ich hier vor dem Rechner sitz!
     
  13. #12 thobit, 08.10.2006
    Zuletzt bearbeitet: 08.10.2006
    thobit

    thobit Routinier

    Dabei seit:
    11.04.2006
    Beiträge:
    265
    Zustimmungen:
    0
    So funktioniert es:

    #include <stdio.h>

    int main()
    {
    int rechteck, laenge, breite;
    printf("Länge eingeben: ");
    scanf("%d", &laenge);
    printf("Breite eingeben: ");
    scanf("%d", &breite);
    rechteck = (laenge == breite);
    if (rechteck == 1)
    {
    printf("Es handelt sich um ein Rechteck!\n");
    }
    else if (rechteck == 0)
    {
    printf("Es handelt sich nicht um ein Rechteck!\n");
    }
    return 0;
    }

    Sonst setzt er die Variable gleich 1. == Hingegen ist der Vergleichsoperator und if wird ausgeführt, wenn die Bedingung wahr ist.

    Sorry, dass es so "unhübsch" aussieht, aber ich weiß nicht wie man diese Kästchen hinbekommt.

    EDIT
    Ich hing wohl etwas zu lange beim editieren rum. Oben ist das jetzt schon erklärt
     
  14. buli

    buli Debianator

    Dabei seit:
    16.09.2006
    Beiträge:
    789
    Zustimmungen:
    0
    Ort:
    Essen/Ruhrgebiet
    Nö, der hat nur:

    Code:
    void main[void]
    Angemeckert.
    (stand auch im Buch)

    Musste ich mit int machen.
     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. tavgm

    tavgm Doppel-As

    Dabei seit:
    20.09.2006
    Beiträge:
    123
    Zustimmungen:
    0
    Ort:
    Karlsruhe
    gut ich kenn mich net so mit C aus aber = ist ne Zuweisung
    if wird in verbindung mit einem sog. Vergleichsoperator verwendet.
    Der einen Ausdruck auf wahr falsch ueberueft.


    Und da kann ich meinen Vorednern zu zustimmen das ist ein sehr sehr grober Fehler.

    Gruss tavgm
     
  17. buli

    buli Debianator

    Dabei seit:
    16.09.2006
    Beiträge:
    789
    Zustimmungen:
    0
    Ort:
    Essen/Ruhrgebiet
    ne, passt schon!
    Genau mit den gleichen Änderungen funzt es bei mir ja auch.
    Nur, ich kapier den Unterschied nicht!

    zwischen =
    und ==
     
Thema:

C-Anfängerfrage