2016-04-08 20 views
1

Wenn ich Whitespace zwischen% d und% c Spezifikation in der Formatzeichenfolge der scanf-Funktion in dem folgenden Programm nicht einschließen und während der Laufzeit eingeben als "4 h", dann die Ausgabe ist "Integer = 4 und Zeichen =.Whitespace vor% c-Spezifikation im Formatspezifizierer der scanf-Funktion in C

Wie genau Variable" c "nimmt die Eingabe in diesem Fall und welchen Unterschied macht es, wenn ich ein Leerzeichen zwischen% d und% c Spezifikation?

#include<stdio.h> 
main() 
{ 
char c; 
int i; 
printf("Enter an Integer and a character : \n"); 
scanf("%d %c",&i,&c); 
printf("Integer = %d and Character = %c\n",i,c); 
getch(); 
} 

Antwort

1

Ein Raum vor %c Spezifizierer in scanf ihn anweisen, eine beliebige Anzahl von weißen Räumen zu überspringen. in Mit anderen Worten, lesen Sie von der Standardeingabe bis und wenn nicht ein Nicht-Leerzeichen-Zeichen oder ein Tastatur-Interrupt gefunden wird.

+1

Dies bedeutet, dass, wenn ich nicht den Leerraum zwischen% d und% c Spezifikationen verwende, während der Eingabe als "4 h" Compiler die "Whitespace" auf die Char-Variable 'c' Bin ich richtig? ? –

+0

@ Shubhamdubey2111; Ja. Genau. – haccks

+0

Vielen Dank für Ihre Hilfe. –

3

Wenn Sie die Spezifikation für scanf() sorgfältig gelesen haben, überspringen die meisten Formatbezeichner führenden Leerraum. In der Standard-C gibt es drei, die nicht:

  • %n - wie viele Zeichen haben
  • %[…] zu diesem Punkt verarbeitet worden - Scan setzt
  • %c - lesen Sie ein Zeichen.

(POSIX fügt eine vierte, %C, die %lc äquivalent ist.)

Eingangsleerraumzeichen (wie durch isspace angegeben) wird übersprungen werden, es sei denn, die Umwandlung Spezifikation ein [ umfasst, c, C oder n Konvertierungsspezifizierer.

den Raum zwischen %d und %c Addiereinrichtung dass optional Leerraum übersprungen wird, nachdem die ganze Zahl gelesen wird, und bevor die (nicht Leerraum) Zeichen gelesen wird.

+0

Auch das Einschließen/Ausschließen der Leerzeichen wirkt sich nicht auf das Programm aus, wenn zwei Ganzzahlen anstelle eines Zeichens und einer Ganzzahl im Spiel sind. Warum? –

+1

@ Shubhamdubey2111 Die Antwort liegt in "Wenn Sie die Spezifikation für scanf() sorgfältig lesen, überspringen die meisten Formatspezifikationen ** (wie% d) ** führenden Leerraum. In Standard C gibt es drei, die nicht:" – chux

+0

Okk .. Jetzt habe ich es. Danke –