Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

27.11.2008, 19:00

[C] Ein paar Fragen

Also wie der Titel schon verrät , hätte ich ein paar Fragen zu der Programmiersprache C .

Momentan bringe ich mir mit einem Buch C bei (Dannach C++) , um später in die Spieleprogrammierung einzusteigen :) .

Ich manchen meiner Fragen , brauche ich nur eine Bestätigung - In anderen aber eine richtige Antwort mit Erklärung . ;) Hoffe , dass ihr mit helfen könnt !
Das Buch heißt "C - Programmieren von Anfang an" , geschrieben von Erlenkoetter.

1.Frage : Was hat es genau mit && , ! und || und case zu tun ?





Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/* bspl0018.c */
#include <stdio.h>

main() {
    int jahr,monat,tage;
    printf("\n\tK a l e n d e r\n");
    printf("\nBitte Jahr eingeben: ");
    scanf("%i",&jahr);
    printf("Bitte Monat eingeben: ");
    scanf("%i",&monat);
    if (monat>=1 && monat <=12 && jahr > 1582) {
        switch (monat) {
            case 2:
                if (!((jahr%100)%4) && (jahr%100) || !(jahr%400))
                tage = 29;
                else
                    tage = 28;
                break;
            case 2*2:
            case 6:
            case 9: case 11:
                tage = 30;
                break;
            default:
                tage = 31;[/b]
        }
        printf("\n%i hat der Monat %i %i Tage",jahr,monat,tage);
    }
    else
        printf("\nFalsche Datumsangaben!");
}


Also , ich bin relativ verwirrt mit diesem Teil , und es macht mir einfach Kummer , wenn ich etwas nicht kapiere , und will deshalb auch noch nicht weiterlesen in dem Buch , weil ich somit das nächste nicht verstehe , und ich mich somit noch komplett reinreite !

Und wie geht das bitte nochmal mit switch ?

Also das ! bedeutet das etwas nicht sein darf , z.B. in dieser Zeile :


Quellcode

1
if (!((jahr%100)%4) && (jahr%100) || !(jahr%400))


Aber das && irritiert mich , weil ich nicht weiß was es beudetet ... Das || bedeutet glaube ich oder , aber erklärt es mir bitte :(

2

27.11.2008, 19:18

&& ist der logische UND-Operator. Der sollte eigentlich erklärt werden...
Naja, damit kannst du aussagenlogische Verknüpfungen bilden. Beispielsweise ist folgender Ausdruck wahr, wenn a grösser als 3 und kleiner als 7 ist.

C-/C++-Quelltext

1
a > 3 && a < 7

Ebenso verhält es sich mit dem ODER-Operator ||. Der gibt true zurück, wenn mindestens eine der beiden Bedingungen wahr ist.

Zuerst C zu lernen, um nachher auf C++ umzusteigen, finde ich nicht gerade sinnvoll. Auf diese Weise eignest du dir viele Dinge an, für die es in C++ bessere Alternativen gibt. Dann wirst du nur unnötigen Ballast mit dir rumschleppen und wahrscheinlich noch einige Zeit mit schlechten Ansätzen aus C hantieren...

3

27.11.2008, 20:18

Der ! operator ist ein logisches NICHT, d.h eine Negierung.

Beispiel:

C-/C++-Quelltext

1
if (var != 10)


wird also nur aufgerufen wenn var NICHT 10 entspricht, also ungleich 10 ist.

Anderes Beispiel:

C-/C++-Quelltext

1
2
3
int var;
if (!(cin >> var))
    std::cout << "Falsche Eingabe";


Wird nur aufgerufen wenn für var keine Zahl eingegeben wurde. Brauchst du oft um Fehler abzufangen.

Switch/Case funktioniert folgendermaßen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int var;
cin >> var;

// Als parameter musst du die Variable angeben, nach der verzweigt werden soll:

switch(var)
{
   // wurde 1 gedrückt?

   case 1:
        std::cout << "1 gedrückt" << std::endl;
        // BREAK ja nicht vergessen, sonst führt es auch noch case 2 aus (höchstens es ist beabsichtigt!!!

        break;

   // wurde 2 gedrückt?

   case 2:
        std::cout << "2 gedrückt" << std::endl;
        break;

   // wurde was anderes gedrückt?

   default:
        std::cout << "andere taste gedrückt" << std::endl;

4

27.11.2008, 21:11

Zitat von »"raXor"«

Der ! operator ist ein logisches NICHT, d.h eine Negierung.

Beispiel:
Das ist aber der !=-Operator... ;)

switch kann generell bei Fallunterscheidungen sehr nützlich sein. Vor allem mit Enums arbeitet es ganz gut zusammen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
enum Color
{
    Purple,
    Yellow,
    Teal
};

Color myColor = ...;
switch (Color)
{
    case Purple:
        PurpleFunction();
        break;

    case Yellow:
        ...
}

5

27.11.2008, 21:24

?

der != ist ein ungleich operator, der ! ist der NICHT operator...

http://www.uni-koeln.de/rrzk/kurse/unterlagen/java/javaref/datatyps/boolean.htm

6

27.11.2008, 23:06

Ja, guck dir dein Beispiel an:

Zitat von »"raXor"«

C-/C++-Quelltext

1
if (var != 10)
...

Du musst zwischen operator!= und operator! differenzieren.
(z.B. ist operator! bei std::istream überladen, operator!= nicht ;))
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Anonymous

unregistriert

7

28.11.2008, 07:09

Zitat von »"raXor"«

der != ist ein ungleich operator, der ! ist der NICHT


Na ja, "Nicht Operator" ist nicht ganz richtig.

http://www.cppreference.com/wiki/operator_precedence

Nenn ihn besser "Inverter", das kennen selbst Leute die mit Gatter-Technik arbeiten und der Begriff ist geläufiger als "NICHT".

8

28.11.2008, 13:34

Danke euch vielmals :) Nun verstehe ich das auch alles wie es angewendet wird :)

Aber in C sind doch viele Elemente drin , die in C++ auch drin sind , oder ?

hanse

Alter Hase

Beiträge: 472

Wohnort: Wien

  • Private Nachricht senden

9

28.11.2008, 13:56

Zitat von »"Lodda"«

Danke euch vielmals :) Nun verstehe ich das auch alles wie es angewendet wird :)

Aber in C sind doch viele Elemente drin , die in C++ auch drin sind , oder ?

Ja, fast alles. Er meint eher, dass du dir durch C bestimmte Programmiertechniken angewöhnst, die in C++ nicht mehr schön sind, weil es bessere Alternativen gibt. Allerdings macht das bei deinem jetzigen Stand noch nicht viel aus. Achte darauf, dass du früh genug umsteigst.

10

28.11.2008, 14:15

Zitat von »"hanse"«

Allerdings macht das bei deinem jetzigen Stand noch nicht viel aus. Achte darauf, dass du früh genug umsteigst.

Das wird eben häufig falsch eingeschätzt. Was man schon früh falsch lernt, gewöhnt man sich an und nachher ist es umso schwerer, davon wegzukommen. Die Tendenz, dass man auch später noch die C-Dinge anstelle von C++-Möglichkeiten einsetzt, ist gross. Besser, man lernt bereits von Anfang an richtiges C++.

Werbeanzeige