C Fragen eines Anfängers (VisualStudio)
-
hallo,
ich versuche derzeit mir ein bisschen die Grundlagen von C++ anzueignen. Erfahrung habe ich bereits mit TP (Schule) und VB gemacht, wobei mir VB immer viel Spaß gemacht hat.
Da ich im Internet ein nettes Tutorial gefunden habe, dachte ich mir, das ich dieses einfach einmal abarbeite. Doch auch bei den besten Tut's treten hin und wieder fragen auf:
1. Was genau bedeutet "%d" ? Dient dies nur als Platzhalter, so das der compiler weiss, das an dieser stelle eine Variable eingesetzt werden muss ?
2. ich glaube ich bin zu blöd die Syntax von Schleifen zu verstehen. Bei VB war das ja super einfach, aber auf folgendes kann ich mir einfach keinen reim machen:
void main(void) { int DezZahl; int i; int xyz; printf ("\nBitte Zahl eingeben ( 0 - 255 ) : "); scanf ("%d", &DezZahl); printf ("\n\n%d ist in Binaerdarstellung ",DezZahl); for ( i = 7 ; i >= 0 ; i--) { if ( DezZahl&(1<<i)) printf ("1"); else printf ("0"); } printf ("\n\n");was genau passiert dort in der schleife ?
--> for (i = 7 ; i >= 0 ; i--)
i startet mit dem wert 7; i muss grösser gleich null sein; und das "i--" ?--> if ( DezZahl&(1<<i)) printf ("1");
was genau hat diese stelle zu bedeuten ?3. wie ist der befehl um eine beliebige tasteneingabe abzuwarten ? habe das problem, das sich mein dos-fenster sofort nach ausführen des codes wieder schliesst.
vielen dank im vorraus

-
@1: das ist kein Platzhalter für den Compiler, sondern für die Funktion scanf() - mit diesen Kennzeichnungen kann sie unterscheiden, was für Eingaben sie zu erwarten hat (und mit scanf() kann man fast alle Build-in Datentypen von C einlesen).
@2:
for ( i = 7 ; // Initialisierung i >= 0 ; // Abruchbedingung i--) // Iterationist die klassische for()-Schleife - der Abschnitt 'Initialisierung' (i=7) wird ganz am Anfang der Schleife ausgeführt, der Abschnitt 'Iteration' (i-- = veringere i um 1) am Ende jedes Schleifendurchlaufs (bevor mit der 'Abbruchbedingung' (i>=0) überprüft wird, ob noch ein Durchlauf nötig ist.
(ja, in C kann die for()-Schleife etwas mehr als nur aufwärts/abwärts zu zählen :D)if ( DezZahl&(1<<i))nutzt aus, daß C beliebige Zahlenwerte als Boolean interpretieren kann (0 ist false, andere Werte true) - DezZahl wird binär verUNDet mit 1<<i (d.h. eine Binärzahl mit genau einer 1 an Stelle i und ansonsten Nullen) - wenn das Ergebnis ungleich 0 ist (d.h. wenn an Bitstelle i von DezZahl eine 1 steht), wird die Anweisung hinter dem if() ausgeführt.
@3: Wirf mal einen Blick in die Konsolen-FAQ - Thema "automatisches Schließen verhindern"
PS: Du solltest vielleicht von vorne anfangen, dein Tutorial durchzuarbeiten

-
1. Ja, %d dient als Platzhalter für eine Dezimalzahl die als nächster Parameter folgen muß.
2. Genau. i startet mit 7, bei jedem Durchgang wird i heruntergezählt. (Anstatt i-- hätte man auch i=i-1 schreiben können.) Die Schleife stoppt wenn i negativ wird. Es gibt also 8 Durchgänge.
"<<" ist der Schiftoperator. Wenn da steht 1<<i (mit i=3) wird die 1 genau 3 mal mit 2 multipliziert, was gleichbedeutend ist mit eine 1 um drei stellen nach links zu schieben.
"&" ist binäres UND. Wenn zwei Binärzahlen mit UND verknüpft werden stehen nur an den Stellen 1 wo vorher an beiden Stellen 1 waren. Beispiel (00010011 UND 11111110) = 00010010
Wenn DezZahl 5 ist, ist sie in binärdarslellung 101.
Im 1. Schleifendurchgang wird 101 UND 1 überprüft: Ergebis ist 001, es wird eine 1 ausgegeben.
Im 2. Schleifendurchgang wird 101 UND 10 überprüft: Ergebis ist 000, es wird eine 0 ausgegeben.
Im 2. Schleifendurchgang wird 101 UND 100 überprüft: Ergebis ist 100, es wird eine 1 ausgegeben.CStoll war mal wieder schneller

-
Hallo,
erst einmal vielen Dank für die schnelle Antwort.
Als Tut habe ich mir das AOL tutrial von eurer seite heruntergeladen. Leider wird dort genau auf diese Sachen nicht explizit eingegangen, deshalb meine Frage(n)
Und keine Angst, ich habe von vorne angefangen.so ganz bin ich noch nicht dahintergestiegen.
if ( DezZahl&(1<<i))was genau bedeutet "1<<i" ?
Wenn DezZahl 5 ist, ist sie in binärdarslellung 101.
Im 1. Schleifendurchgang wird 101 UND 1 überprüft: Ergebis ist 001, es wird eine 1 ausgegeben.
Im 2. Schleifendurchgang wird 101 UND 10 überprüft: Ergebis ist 000, es wird eine 0 ausgegeben.
Im 2. Schleifendurchgang wird 101 UND 100 überprüft: Ergebis ist 100, es wird eine 1 ausgegeben.ok, das habe ich so weit verstanden:
1. durchgang: 101 UND 001 = 001 usw...
aber woher kommt dann die 10 und die 100 ?danke schonmal für die geduld
greetz
-
In "1<<i" gibt das i an um wieviel binäre Positionen die Zahl davor (hier 1) nach links verschoben wird.
Aus 1<<3 würde 100 biniär oder 8 in dezimal werden.
Man könnte auch schreiben 1*2^iEDIT: Die binäre 10 entsteht dadurch das die 1 um eins nach links verschoben wurde, bei der binären 100 halt 3 Stellen nach links.
-
super danke

nur um des Verständnis' wegen:
DezZahl = 23
for ( i = 7 ; i >= 0 ; i--) { if ( DezZahl&(1<<i)) printf ("1"); else printf ("0"); }C++ wandelt die 23 in eine Binärzahl um. Also 00010111 !
DezZahl&(1<<i--> 00010111 + 0000001 = 0000001 = 1
--> es wird also eine 1 ausgegeben.beim 2ten durchgang:
00010111 + 0000010 = 0000010 = 10beim 3ten durchgang:
00010111 + 0000100 = 0000100 = 100beim 4ten durchgang:
00010111 + 0001000 = 0000000 = 0beim 5ten durchgang:
00010111 + 0010000 = 0010000 = 10000ALSO: 1 + 10 + 100 + 0 + 10000 = 10000 + 0 + 100 + 10 + 1 = 0010111
ist das so weit ok, oder habe ich einen denkfehler drin ?
das zeichen
<<gilt also nur für binäre operationen um auf den nächsten bit zu wechseln ?
-
entspricht das
if ( DezZahl&(1<<i)) printf ("1"); else printf ("0");nicht dem?
if ( DezZahl == i) printf("1"); else printf ("0");
-
hi,
habe mal wieder eine frage. wobei ich langsam anfange mich an die syntax von c zu gewöhnen
ich bin bei meinem tutorial nun bei dem umgang mit dateien angekommen. wenn man eine datei öffnet muss man diese ja einer prüfung unterziehen. dies wird in dem tut so gelöst:
if (datei == NULL ) { printf ("\nDie Datei konnte nicht geöffnet werden!\n"); }was genau bedeutet das "== NULL" ?
wird dort geprüft ob die datei leer ist, also keinen inhalt besitzt ?
-
nicht sicher schrieb:
entspricht das
if ( DezZahl&(1<<i)) printf ("1"); else printf ("0");nicht dem?
if ( DezZahl == i) printf("1"); else printf ("0");Nein - ersteres steht (indirekt) für "i-tes Bit in DezZahl ist gesetzt", letzteres für "DezZahl hat den Wert i"
@neomon: NULL steht für einen ungültigen Zeiger - und Funktionen wie fopen() geben mitunter NULL zurück, um Fehler zu kennzeichnen (d.h. die genannte Datei konnte nicht geöffnet werden).