Merhaba, tekrar hoş geldiniz.
Bu konuşmada şunları yapmak istiyorum bir dosyaya yazma hakkında konuşun.
Biz konsantre olacağız bir metin dosyasına yazma konusunda.
Ne hakkında öğreneceğiz karakterleri nasıl yazabileceğiniz, dizeleri nasıl yazabileceğiniz
ve biçimlendirilmiş çıktı yazabilirsiniz.
Ayrıca şu üç yol okuyabildik.
Yani üç fonksiyon var Bunları yapmak için
gerçekten aşina olmanız gerekir.
En basit yazma işlemi şudur fputc işlevinde sağlanmıştır.
Yani tıpkı bir fgetc olduğu gibi karakterleri okumak için, karakterleri
yazmak için bir fputc vardır.
Bu, tek bir karakterini bir metin dosyasına aktarır, fputc.
Yazmak kadar verimli değil dizeler, ama bazen gerekli.
Olarak bir tamsayı alır ilk parametre ve ikinci parametre olarak bir
dosya işaretçisi ve bir tamsayı döndürür.
Fonksiyon aşağıdakileri yazar dosyasına ilk bağımsız değişken
tarafından belirtilen karakter ikinci bağımsız değişken tarafından tanımlanır.
Yani dosya işaretçisi her zaman yaptığı şey: yazmak istediğiniz
dosya.
Ve sonra senin karakterin aslında yazmak istediğiniz
yer ilk parametrenizdir.
Döndürülen karakter başarılı ise yazılmıştır.
Unutmayın, eğer eof döndürürse, başarısız olduğu anlamına gelir.
dışında bir şey döndürürse eof, başarılı olduğu anlamına gelir.
Uygulamada, karakterler genellikle fiziksel bir
dosyaya tek tek yazılmaz.
Son derece verimsiz.
putc fonksiyonu fputc ile eşdeğerdir.
Bunun da sıklıkla kullanıldığını görürsünüz.
Aynı argümanları gerektirir ve dönüş türü aynıdır.
Aralarındaki fark şudur putc'nin standart kütüphanede bir makro olarak
uygulanabileceğini belirtmiştir.
Oysa fputc bir fonksiyondur, yani.
Çok fazla fark yok ama makrolar hakkında bir şey öğrenmedik.
Bu yüzden fputc ile devam edeceğiz tek karakter yazmak için.
Ve bir örnek için, bu oldukça açık.
Her zaman olduğu gibi yapmanız gereken ilk şey dosyayı açmanız gerekir.
Ondan önce biz beyan ediyoruz değişkenleri, bir dosya işaretçisi bildiririz, null
olarak başlatılmalıdır.
Ve sonra tamsayımız yazacağız.
Dosyamızı açtığımızda w veya w artı yaptığımıza dikkat edin.
Bu demek oluyor ki Sadece yazabilirsin, okuyamazsın.
W plus, yazabildiğiniz ve okuyabildiğiniz anlamına gelir.
Bu durumda yazabilir ve okuyabiliriz.
Burada bir for döngümüz var.
Her şeyi gözden geçiriyoruz. 33'ten başlayarak 100'e kadar karakter.
Bunlar tam sayı olduğunda, ne Bu, karakterin ASCII tablosunda
temsil edildiği anlamına gelir.
Yani örneğin karakter yazarsanız 59, neyi temsil ettiğini görmek için ASCII
tablosuna bakmanız gerekir, ama gerçek bir karakter olacaktı.
Burada sadece yazıyoruz ASCII değerleri 33 ila 100 arasındadır
ve fputc char fp diyoruz.
Ve dönüşüm kullanabilirsiniz fonksiyonlarını ASCII değerleri ve tamsayılar
oluşturmak istiyorsanız kullanabilirsiniz, sadece bir atoi kullanabilirsiniz.
Bu yüzden eğer c karakteri, fputc atoi diyebilir ve ardından c'yi
tek tırnak içine alabilirsiniz.
Bu da iyi olurdu. çünkü ASCII'yi bir tamsayıya
dönüştürür ve yazar.
Ancak ilk bağımsız değişken bir tamsayıdır, bu yüzden bir tamsayı yazmanız gerekir.
İkinci argüman dosyamızdır İşaretçi, oldukça açık.
Ve sonra yapmamız gereken son şey yapmamız gereken o dosyayı kapatmak.
Muhtemelen şunları da yapmak istiyoruz fp işaretçisini null olarak ayarlar.
Ancak yine bir tamsayı alır.
O yüzden dikkatli olun.
Her zaman temsil edilir ASCII tablosunda.
Ancak, gerçek atoi kullanarak iki tamsayıyı karakterize eder.
Bir dize yazmaya ne dersiniz çok daha kullanışlı, daha
verimli bir metin dosyasına dönüştürür.
Burası kullandığınız yer fputs işlevi.
Bu size şunları sağlayacaktır herhangi bir dosyaya veya akışa yazabilir.
Bu fgets'e benzer, o olarak yazmak istediğiniz sabit bir yük dizesi
alır. işaretçiye ilk parametre.
Ve bizim ikinci olarak parametresi, dosya işaretçisi, hangi dosyaya yazmak
istediğinizi belirtir.
Ve sonra bir int döndürür.
Yani ilk argüman bizim Yazmak istediğiniz karakter dizesini
işaretleyin.
İkinci bağımsız değişken dosya işaretçisinin kendisidir ve işlev bir
dizeden karakterler yazacaktır null sonlandırıcıya ulaşana kadar.
Null yazmaz sonlandırıcı karakterini dosyaya ekleyemezsiniz, bu nedenle
bunu açıkça yazmanız gerekir.
Bu durum işleri karmaşıklaştırabilir çünkü verileri geri okuduğunuzda,
değişken uzunlukta olabilir ve null sonlandırıcıda bitmeyecektir.
Bu yüzden, onun bir Sonunda
yeni bir satır karakteri olan metin
satırı.
Bu yüzden aşina olduğunuzdan emin olun null sonlandırıcı
ile ve ya fputc kullanarak açıkça yazın, tek bir karakter veya yazın ve temel olarak yeni satır karakterini
ekleyecektir yazdıktan sonra sonuna ekleyin.
Bu yüzden yeni bir çizgi karakterinin orada olması.
Bunu açıkça belirtmeniz gerekir.
Bu oldukça basit kod açısından.
Sadece fopen diyorsun.
Fputs, içine bir dize yazar dosya işaretçisini kullanarak yeni satır.
Ve sonra başka bir fputs burada şöyle yazıyor başka bir dize ve sonra onu kapatırsınız.
Yani bu durumda, iki tane dizeleri, aslında iki satır kod veya dosyadaki
iki satır ve biz w plus ile dosyayı açtı, bu okuma ve yazma
içindir.
Yazma örnekleri şunlardır oldukça açık.
Sadece birkaç fonksiyon çağırırsınız, fopen ve sonra fputs ve sonra fclose.
Şimdi biçimlendirilmiş çıktı yazmak için, fprintf kullanacağız.
Yine fark edeceksiniz ki okumak ve girmek için scanf ve printf,
sadece bunu eklersiniz fprefix'i işlevin önüne getirdiğinizde biçimlendirilmiş
çıktı yazarsınız.
Yani biçimlendirilmiş çıktı yazmak için fprintf ile birlikte bir tamsayı döndürür.
Olarak bir dosya akışı alır ilk parametre ve ardından
format belirticileri takip eder her format için değişken sayıda argümanla virgüllerle
belirteci tıpkı printf gibi gerçekten.
Fonksiyonun ilk argümanı dosya nesnesinin işaretçisidir.
Ve sonra ikinci argüman bu değişken sayıda argüman.
Bir tane içeren bir c dizesidir veya aşağıdaki öğelerden daha fazlası,
boşluk karakteri, boşluk olmayan bir karakteri, biçim belirticileri.
Ve yine, bu çok printf'e benzer.
Ama aslında bir dosyaya yazıyorsunuz.
Böylece biçimlendirilmiş bir dosyaya çıktı.
Eğer başarılı olursa, geri dönecektir yazılan karakter sayısı.
Aksi takdirde Başarılı olmazsa negatif
bir sayı döndürür.
Şuna benzer bir şey.
Standart IO başlığını eklersiniz.
Dosya işaretçinizi oluşturursunuz.
Daha sonra dosya işaretçinizi kullanırsınız bir metin dosyasını açmak, okuma ve yazma
için w plus için kullanmak ve sonra sadece fprintf diyorsunuz.
Bu durumda, fprintf diyoruz.
Dosyayı belirtiyoruz işaretçisi ve ardından bir ile ayrılmış
dört dizge belirtiyoruz boşluk ve ardından yüzde d.
Ve yazıyoruz Merhaba, numaram 555.
Yani dosya aslında verileri yazdığınızda biçimlendirilir.
Buna kod blokları halinde bakalım ve nasıl göründüğüne bakın.
Yani burada çok fazla kod yok.
Sadece birkaç satır kodumuz var.
Dördüncü satırda dosya işaretçimizi oluşturuyoruz.
Ve yine, biz isteyeceğiz bunu null olarak başlatın.
Daha sonra, altıncı satırda fopen'ı çağırıyoruz.
Ve dosya aç diyoruz. txt, böylece Dosya. txt mevcut olmalı ve ya c kaynak dosyasının
çalıştığı yerde veya programı çalıştırılabilir dosyanın olduğu yerde
manuel olarak çalıştırıyorsanız.
Açacağız. okuma ve yazma için.
Açtıktan sonra, dosya işaretçisinin null olmadığından
emin olmak istiyoruz.
Bu yüzden fp değil demek istiyoruz.
Eğer null değilse, o zaman veri yazmaya başlayabilir.
Ve bu durumda, 9. satırda biçimlendirilmiş veri yazacak.
Yani yazacağımız şey bir dize, iki dize, üç dize, dört dize
yazacağız. dizesi ve ardından bir tamsayı.
Ve sonraki parametreler şunlardır sadece virgülle ayrılmış
dizelerin yanı sıra sondaki tamsayımız.
Sadece bu çifti düzeltmeliyim. alıntılar çünkü doğru çalışmıyor, bu
yüzden 555 orada en sonda.
Ve sonra kapanacak ve dosyayı iade edin.
Öyleyse devam edelim ve Bunu çalıştırdığımızda gerçek bir çıktı
göremeyeceğiz.
Bakmamız gerekecek. dosyanın neye benzediğine bakın.
Yani bu dosyayı derlediğimizde, if ifadenizin null'a eşit
değil dediğinden emin olmak istersiniz.
Yani bunu tekrar çalıştırdığımızda, herhangi bir çıktı görmeyeceksiniz,
sadece çalışacak.
Ve sonra dosyaya baktığınızda dizinin içinde, girdiyi tek bir
dizinde içerdiğini göreceksiniz Hat, merhaba benim adım Fpp veya 555'te.
İşte bu şekilde biçimlendirilmiş çıktı yazın.
Oldukça basit.
Yeni ekleyebilirsiniz Eğer istersen.
Sonuna yeni bir satır ekleyecektir, ama buraya ters eğik çizgi n koyabilirsiniz.
Tıpkı printf gibi çalışır.
Tekrar söylüyorum, bunu çalıştırmak zorundayız. dosyaya bakana kadar gerçekten ilginç
bir çıktı görmezsiniz.
Ve bu durumda, bir satır beslemesi görürsünüz.
Yani çıktıyı bir dosyaya yazma oldukça basittir.
Karakter yazmak istiyorsan fputc yapın,
dizeleri fputs, biçimlendirilmiş çıktıyı fprintf yazmak istiyorsunuz.
Bazı zorluklarımız olacak. daha da aşina olmanıza
yardımcı olur, ancak bunu yapmak oldukça kolaydır. çıktıyı bir metin dosyasına yazar.
Teşekkür ederim.