2010-01-29 3 views
13

Drucken Sehr viel ein Anfänger bis c, in der Tat ist dies mein erstes Tester-Programm.Wie in C

Ich kann nicht wirklich herausfinden, wie diese Nummer auf dem Terminal ausgedruckt wird.

Ich bin sicher, dass ich in Java konnte ich nur printf mit system.out ersetzen und es hätte funktioniert. Ich habe versucht, die Antwort früher zu suchen, aber wenn Sie nicht wissen, was Sie suchen, ist es schwer, eine Antwort zu finden.

+1

Sie können feststellen, http://www.cppreference.com/wiki/ sehr hilfreich finden Sie im Abschnitt auf der Standard-C-Bibliothek. –

Antwort

31

versuchen Sie dies:

printf("%d", addNumber(a,b)) 

Hier die documentation for printf ist.

+7

Möchte einen Zeilenumbruch oder 'fflush (stdout)' hinzufügen. –

17

Das erste Argument zu printf() ist immer ein Zeichenfolgenwert, der als Formatkontrollzeichenfolge bezeichnet wird. Diese Zeichenfolge kann normaler Text sein, wie

printf("Hello, World\n"); // \n indicates a newline character 

oder

char greeting[] = "Hello, World\n"; 
printf(greeting); 

Diese Saite auch ein oder mehrere Konvertierungsspezifizierer enthalten; Diese Konvertierungsbezeichner geben an, dass zusätzliche Argumente an printf() übergeben wurden, und sie geben an, wie diese Argumente für die Ausgabe formatiert werden. Zum Beispiel kann ich den oben ändern

char greeting[] = "Hello, World"; 
printf("%s\n", greeting); 

Die „% s“ Konvertierungsspezifizierer einen Zeiger auf eine 0-terminierte Zeichenkette erwartet, und formatiert sie als Text.

Für Dezimalzahl Ausgabe unterzeichnet, verwenden Sie entweder die "% d" oder "% i" Konvertierungsspezifizierer, wie

printf("%d\n", addNumber(a,b)); 

Sie normalen Text mit Konvertierungsspezifizierer mischen kann, etwa so:

printf("The result of addNumber(%d, %d) is %d\n", a, b, addNumber(a,b)); 

Beachten Sie, dass die Umwandlungsspezifikatoren in der Kontrollzeichenfolge die Nummer und Typen von zusätzlichen Parametern angeben. Wenn die Anzahl oder Typen zusätzlicher Argumente, die an printf() übergeben wurden, nicht mit den Konvertierungsangaben in der Formatzeichenfolge übereinstimmen, ist das Verhalten nicht definiert. Zum Beispiel:

printf("The result of addNumber(%d, %d) is %d\n", addNumber(a,b)); 

führt zu etwas von verzerrten Ausgang zu einem vollständigen Absturz.

Es gibt eine Reihe zusätzlicher Flags für Konvertierungsspezifikatoren, die Feldbreite, Genauigkeit, Auffüllung, Ausrichtung und Typen steuern. Eine vollständige Liste finden Sie in Ihrem handlichen C-Referenzhandbuch.

+2

Ich kann nicht in gutem Gewissen eine Antwort aufschlagen, die printf () vorschlägt. Haben wir nicht schon gelernt, den format-String immer explizit anzugeben? Ich mag den Rest der Antwort, obwohl. –

+0

@AndrewColeson Ich sehe nicht, wovon Sie sprechen. Diese Antwort verwendet das Format "Hallo, Welt \ n" ', das keine Ersetzungen enthält, und andere. Das Format ist "Immer explizit angegeben". –

+1

@PascalCuoq er spricht von 'printf (gruß)' was in diesem beispiel harmlos ist, aber immer noch mich (und vermutlich auch andere) ein wenig zusammenschrumpfen lässt. – Cubic

0

printf ist ein bisschen komplizierter als das. Sie müssen eine Formatzeichenfolge und dann die Variablen angeben, die auf die Formatzeichenfolge angewendet werden sollen. Wenn Sie nur eine Variable angeben, geht C davon aus, dass dies die Formatzeichenfolge ist, und versucht, alle darin gefundenen Bytes auszudrucken, bis sie ein abschließendes Null (0x0) erreicht.

Also, wenn Sie es nur eine ganze Zahl geben, es wird fröhlich an der Stelle Ihre ganze Zahl durch die Speicher marschieren gespeichert ist, Dumping, was Müll ist auf dem Bildschirm dort, bis sie über ein Byte kommen passiert enthält 0.

Für einen Java-Programmierer würde ich mir vorstellen, dass dies eine ziemlich unhöfliche Einführung in Cs fehlende Typprüfung ist. Glauben Sie mir, das ist nur die Spitze des Eisbergs. Deshalb rate ich Ihnen, Ihren Horizont zu erweitern, indem Sie C lernen, und ich schlage Ihnen vor, dass Sie alles tun, was Sie können, damit Sie keine echten Programme darin schreiben.

(Dies gilt auch für alle anderen dies zu lesen.)