\n
sorun
#include<stdio.h>
int main()
{
int marks[3];
int i;
for(i=0;i<3;i++)
{
printf("Enter a no\n");
scanf("%d",(marks+i));
}
printf("\nEntered values:\n");
for(i=0;i<3;i++)
{
printf("%d\n",*(marks+i));
}
return 0;
}
Sebep:
Gelecek sadece 3
değerleri bir dizi depolanır ancak 4 değerlerini depolar ve bekliyoruz ' 'beklenen gösterim olarak 3 değer için değerler. Benim sorum neden 1 'için' 'döngüde 3 yerine 4 değer alır?
İlk: Hayır, sadece depolar 3
numara ama dizide marks[]
değil 4
sayılar. İkinci
: döngü anlamak için ilginç sadece i < 3
için i = 0
için üç kez çalışır. For döngüsü koşula göre çalışır. aşağıda açıklandığı gibi Daha ilginç kod scanf()
takıldı:
Dört rakam, onun değil döngü çalıştığı için 4
kez ama girmek zorunda neden senin karışıklık onun olmayan bir uzay kömürü girdiğinizde scanf()
işlevi yalnızca döndürdüğü için (ve bazı numaralarından sonra tuşuna basarsanız, boşluk olmayan bir karakter girersiniz). int scanf(const char *format, ...);
:
beyaz boşluk karakterleri dizisi (Boşluk, sekme, yeni satır, vb .; isspace(3)
bakınız) Bu davranışı anlamak için
kılavuzunu okuyun. Bu yönerge girdisinde hiçbiri dahil olmak üzere herhangi bir beyaz boşluk, ile eşleşir. Eğer biçim dizesinde \n
dahil ettik scanf()
yılında Çünkü döngü en birinci yılında
, böylece scanf()
döner sadece basın bir sayı (veya olmayan bir boşluk anahtar) girerseniz.
scanf("%d\n",(marks+i));
^
|
new line char
Ne olur? Programa
varsayalım girdidir:
23 <--- because of %d 23 stored in marks[0] as i = 0
<enter> <--- scanf consumes \n, still in first loop
543 <--- scanf returns, and leave 542 unread,
then in next iteration 543 read by scanf in next iteration
<enter>
193
<enter> <--- scanf consumes \n, still in 3rd loop
<enter> <--- scanf consumes \n, still in 3rd loop
123 <--- remain unread in input stream
olarak eğer açıklamada oluşturulabilir 'boşluk main' yasal değildir. Int main' kullanın. – chris
scanf –