BG MVC Model View Controller eğitim serisi yayında...

Ana sayfa > Programlama > C Programlama > C örnek kodlar > c_ornek00036

C örnek kodlar

fgets() ve fputs() fonksiyonları ile klavyeden karakter dizisi okuma ve ekrana yazma

fgets() fonksiyonu ile klavyeden karakter okurken, ENTER tuşuna basılana kadar okuma işlemi devam eder. Ancak, fgets() fonksiyonunun ikinci parametresinde tanımlanan değerin bir eksiği kadar karakter işlem görür. Fazla karakter girilse bile dikkate alınmaz. Okunan karakterlerin atanacağı dizideki son karakter '\0' karakteri için ayrılır. Karakterler bir karakter dizisine atandıktan sonra, dizi sonuna otomatik olarak, dizi sonunu belirlemek üzere, NULL bir karakter ('\0') eklenir. Girilebilecek maksimum karakter sayısından daha az karakter girilirse, giriş işlemini sona erdiren yeni satır karakteri (10), '\0' karakterinden önce diziye eklenir.

Aşağıdaki programla, girilebilecek maksimum karakter sayısından daha az karakter girildiğinde, giriş işlemini sona erdiren yeni satır karakteri (10) yerine '\0' karakteri koyarak işlem yapabiliriz.


#include <stdio.h>

unsigned int bg_strlen(const char *str);

int main(void)
{
  char cdizi[20];
  char *cp;
  const char *cpstr;
  unsigned int len;

  // Klavye girişini okuma
  printf("Bir karakter dizisi giriniz: ");
  // ENTER tuşuna basılıncaya kadar karakter girişi devam eder,
  // ancak sadece ilk 19 karakter işlem görür. Fazla karakter girilse bile dikkate alınmaz.
  cp = fgets(cdizi, 20, stdin);

  // cdizi dizisine aktarılan karakter sayısı
  len = bg_strlen(cdizi);
  printf("cdizi dizisine aktarılan karakter sayısı: %u\n", len);

  // 0 ('\0') ve 10 ('\n') karakterlerine kadar olan cdizi içeriğini yazma
  for (cpstr = cp; *cpstr && *cpstr!='\n'; ) {
       printf("%c", *cpstr++);
  }

  // 0 ('\0') ve 10 ('\n') karakterlerini yazma
  printf(" %d", (int) *cpstr);
  // Eğer girilen karakter sayısı dizi boyutunun bir eksiğinden az ise
  // giriş yapılan karakterlerin sonuna eklenen '\n' (10) karakteri yerine '\0' karakteri konur.
  if (len<(sizeof(cdizi)-1)) {
      printf(" %d", (int) *(cpstr+1));
      cdizi[len] = '\0'; // Dizide yer alan '\n' karakterini devre dışı bırakmak için
  }
  printf("\n");

  // 0 ('\0') karakterine kadar olan cdizi içeriğini yazma
  for (cpstr = cp; *cpstr; ) {
       printf("%c", *cpstr++);
  }
  printf("\n");

  fputs(cdizi, stdout);

  return 0;
}

unsigned int bg_strlen(const char *str)
{
  const char *s;
  for (s = str; *s && *s!='\n'; ++s);

  return(s - str);
}

Program klavyeden girilen bir karakter dizisini fgets() fonksiyonu ile okuyarak, cdizi adlı diziye atar. bg_strlen() fonksiyonu ile, cdizi dizisine aktarılan karakter sayısını ('\n' ve '\0' karakterleri hariç) hesaplayarak len adlı değişkene atar. Önce, '\n' ve '\0' karakterleri hariç olmak üzere dizi içeriğini, daha sonra varsa '\n' karakterini ve '\0' karakterini ekrana yazar. Eğer '\n' karakteri varsa, yerine '\0' karakteri koyar. Dizi içeriğini bir for döngüsü ve fputs() fonksiyonu ile iki kez ekrana yazar.