10 üzerinden 1 zorluk seviyesine sahip C program projesi

taydin

Timur Aydın
Staff member
Katılım
24 Şubat 2018
Mesajlar
25,332
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?

Kod:
bir
iki
üç
dört
bes
alti
yedi




Kod:
#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:

Kod:
#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 :)

Kod:
#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;
}
 

Çevrimiçi personel

Forum istatistikleri

Konular
7,913
Mesajlar
130,810
Üyeler
3,171
Son üye
zapkinus

Son kaynaklar

Son profil mesajları

Mutluluğun resmi illa güzel çizilmiş tablo olmak zorunda değil.Bazen basit bir çizgi,doğru bir renk,yada küçük bir detay
Python Geliştirmeye eklediğim yapay zeka sunucusu, yeni başlayanlar için roket etkisi
Bir insanın zeka seviyesinin en kolay tesbiti, sorduğu sorulardır.
yapay zeka interneti yedi bitirdi, arama motoru kullanan, forumlara yazan kaldı mı ?
az bilgili çok meraklı
Back
Top