10 üzerinden 1 zorluk seviyesine sahip C program projesi

taydin

Timur Aydın
Staff member
Katılım
24 Şubat 2018
Mesajlar
21,557
Bu projede istenen, programı çalıştırırken bir text dosyasının ismini argüman olarak veriyoruz. Program da, bu text dosyasındaki satır sayısını sayıyor ve ekrana yazıp çıkıyor. Yani:

Kod:
$ countlines thefile.txt
thefile.txt has 157 lines.


Eğer imkan varsa, bu programı GCC ile her üç işletim sisteminde geliştirip çalıştırın.
 
Oldu mu?

test.txt:
bir
iki
üç
dört
bes
alti
yedi




C:
#include <stdio.h>

int main(){

  int OkunanKarakter, SatirSay;

  // file tipinde bir dosya tanımla
  FILE *dosya;

  // okuma için dosyayı aç
  dosya = fopen("test.txt", "r");
 
  // dosya açıldımı?
  if (dosya==NULL)
  {
    printf("Dosya açma hatası!\n");
    return 0;
  }
 
  
  // feof dosya sonuna gelinmediği sürece 0 döndürür
  while (feof(dosya)==0){  // alternatif ifadeler// (!feof(dosya)==1) // (!feof(dosya))
    // dosyadan tek karakter oku, okunan karakter int döner
    OkunanKarakter = fgetc (dosya);
    if (OkunanKarakter==10) SatirSay++; // "\n" satır sonlarını say
  }

  printf("\nDosya icindeki satir sayisi : %d",SatirSay+1);

  // dosyayı kapat
  fclose(dosya);

  return 0;
}
 
Dosya ismini komut satırından alması gerekiyordu, bu program almıyor. Satır sayma doğru çalışıyordur herhalde, ama tek tek karakter okuduğu için verimsiz olur. Aşağıda mümkün çözümlerden birisi:

C:
#include <stdio.h>

int main(int argc, char* argv[])
{
   if (argc > 1)
   {
      FILE* fp = fopen(argv[1], "r");
      if (fp != 0)
      {
         unsigned int count = 0;

         char line[10000];
         while (fgets(line, sizeof(line), fp) != 0)
         {
            ++count;
         }

         fclose(fp);

         printf("Dosyadaki satir sayisi: %u\n", count);
      }
      else
      {
         printf("Dosya acilamadi\n");
      }
   }
   else
   {
      printf("Dosya ismi yok\n");
   }

   return 0;
}
 
Dosya ismini komut satırından alması gerekiyordu, bu program almıyor. Satır sayma doğru çalışıyordur herhalde, ama tek tek karakter okuduğu için verimsiz olur. Aşağıda mümkün çözümlerden birisi:
Hocam ben soruyu anlamamışım :)

C:
#include <stdio.h>

int main(int argc, char* argv[])
{
   if (argc > 1)
   {
      FILE* dosya = fopen(argv[1], "r");
      if (dosya != 0)
      {
         int SatirSay = 0;

         char OkunanKarakter;
         // Dosya sonuna erişildiğinde veya
         // satır sonu karakteri ile karşılaşıldığında
         // belirtilen sayıda karakter okumadan işlem sona erer.
         while (feof(dosya)==0) // alternatif ifadeler// (!feof(dosya)==1) // (!feof(dosya))
         { 
            OkunanKarakter = fgetc (dosya);
            if (OkunanKarakter==10) SatirSay++;
         }
         fclose(dosya);

         printf("Dosyadaki satir sayisi: %d\n", SatirSay+1);
      }
      else
      {
         printf("Dosya acilamadi\n");
      }
   }
   else
   {
      printf("Dosya ismi yok\n");
   }

   return 0;
}
 
Hocam ben soruyu anlamamışım :)
Hayır, satır sayısını okudu da ne oldu? Akranı gibi küçük yaşta kapalıçarşı çırağı olsaydı bugün milyonluk şirket sahibiydi.

Pardon bende soruyu yanlış anladım galiba :katil1:
 

Çevrimiçi personel

Forum istatistikleri

Konular
5,659
Mesajlar
97,347
Üyeler
2,438
Son üye
İbrahimSönmez

Son kaynaklar

Son profil mesajları

cemalettin keçeci wrote on HaydarBaris's profile.
barış kardeşim bende bu sene akıllı denizaltı projesine girdim ve sensörleri arastırıyorum tam olarak hangi sensör ve markaları kullandınız yardımcı olabilir misin?
m.white wrote on Altair's profile.
İyi akşamlar.Arabanız ne marka ve sorunu nedir.Ben araba tamircisi değilim ama tamirden anlarım.
* En mühim ve feyizli vazifelerimiz millî eğitim işleridir. Millî eğitim işlerinde mutlaka muzaffer olmak lâzımdır. Bir milletin hakikî kurtuluşu ancak bu suretle olur. (1922)
Kesici/Spindle hızı hesaplamak için SpreadSheet UDF'leri kullanın, hesap makinesi çok eski kalan bir yöntem :)
Dr. Bülent Başaran,
Elektrik ve Elektronik Mühendisi
Yonga Tasarım Özdevinimcisi
Üç güzel "çocuk" babası
Ortahisar/Ürgüp/Konya/Ankara/Pittsburgh/San Francisco/Atlanta/Alaçatı/Taşucu...

Back
Top