2016-04-08 27 views
1

Aşağıdaki karakter programında, scanf işlevinin dizgesinde% d ve% c belirtimi arasına boşluk koymadığımda ve çalışma zamanı sırasında girdi vermediğimde "4 h" olarak çıktı, sonra çıktı "Tamsayı = 4 ve Karakter = .C programında% s belirtiminden önce c

Bu durumda girişi" c "tam olarak nasıl değiştirir ve% d ile% arasında bir boşluk içeriyorsa ne fark eder? c özellikleri?

#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(); 
} 

cevap

1

scanf içinde %c belirtici önce bir boşluk beyaz olarak herhangi sayıda atlamak için talimat. Gelen Başka bir deyişle, beyaz olmayan bir karakter veya klavye kesmesi bulunana kadar, standart girdiden okunur.

+1

Bu,% d ve% c belirtimleri arasında boşluk kullanmıyorsa, girdiyi "4 saat" olarak alırken, derleyici "c" char değişkenine "boşluk karakterini" yazdığı anlamına gelir? Doğru mu? ? –

+0

@ Shubhamdubey2111; Evet. Kesinlikle. – haccks

+0

Yardımınız için çok teşekkürler .. –

3

scanf() için belirtimi dikkatlice okursanız, çoğu biçim belirteci önde gelen beyaz alanı atlar. Standart C olarak bilmediğimiz üç vardır:

  • %n

    - Bu noktada
  • %[…] kadar işlenmiş olan kaç karakter - Tarama
  • %c
  • setleri - Bir karakteri okuyun.

(POSIX %lc eşdeğer bir dördüncü %C ekler.) (isspace tarafından belirtildiği gibi), dönüşüm özellikleri, bir [ içermedikçe

giriş beyaz boşluk karakterleri, atlanması eder, c, C veya n dönüşüm belirteci. %d ve %c arasındaki boşluk ekleme

isteğe bağlı boşluk tamsayıdır okunduktan sonra atlanır ve (beyaz olmayan alan) karakter okunur önce anlamına gelir.

+0

Ayrıca, bir tamsayı ve bir tamsayı yerine iki tam sayı oynarsa, beyaz boşluk dahil/hariç, programı etkilemez. Neden? –

+1

@ Shubhamdubey2111 Cevap, "scanf() belirtimini dikkatlice okursanız, çoğu biçim belirteci ** (% d gibi) ** önde gelen beyaz alanı atlar. Standart C'de, üç tane yoktur:" – chux

+0

Okk ..Şimdi anladım. Teşekkürler –