File Input
Input adalah sesuatu data yang kita masukan ke dalam program. Input biasanya diambil dari perangakat inputan seperti keyboard, mouse, kamera, microphone, dll.
Pada bahasa C, terdapat beberapa fungsi unutk mengambil input. Oh iya, input yang akan kita bahas di sini adalah input dari keyboard. Input juga bisa dari file, kamera, mikrofon, dan sebagainya. Tapi kita fokus dulu bahas yang paling mudah… Ini adalah fungsi untuk mengambil input dari keyboard:
1. Fungsi scanf()
Fungsi
scanf() adalah fungsi untuk mengambil input dari keyboard. Fungsi ini memiliki format seperti fungsi printf().
Format yang diberikan tergantung dari jenis tipe data apa yang ingin kita ambil. Misalnya mau mengambil angka, maka kita bisa pakai
Hasilnya:
Untuk mengatasi masalah ini, kita bisa ubah format yang digunakan pada
Maka fungsi
Simbol
2.Fungsi gets()
%d atau %i. Mari kita lihat contohnya:#include <stdio.h>
int main () {
// membuat variabel
char name[20], web_address[30];
printf("Nama: ");
scanf("%s", &name);
printf("Alamat web: ");
scanf("%s", &web_address);
printf("\n------------------------------\n");
printf("Nama yang diinputkan: %s\n", name);
printf("Alamat Web yang diinputkan: %s\n", web_address);
return 0;
}
Hasilnya:

Tapi saat kita menginputkan teks yang mengandung spasi, hasilnya akan dipecah menjadi dua seperti ini:

scanf() menjadi seperti ini:printf("Nama: ");
scanf("%[^\n]s", name);
Maka fungsi
scanf() akan menerima spasi. Dalam menggunakan scanf(), kita dianjurkan menggunakan simbol & sebelum nama variabel. Contoh:void main(){
int a, b, c;
printf("Inputkan nilai a: ");
scanf("%i", &a);
printf("Inputkan nilai b: ");
scanf("%i", &b);
c = a + b;
printf("Hasil a + b: %i", c);
}
Simbol
& berfungsi untuk mengambil alamat memori dari sebuah variabel. Fungsi scanf() membutuhkan tempat untuk menyimpan nilai yang akan diinputkan.Karena itu kita memberikan simbol & di depan nama variabel untuk menentukan alamat memori yang akan digunakan oleh scanf(). Nanti ini akan kita bahas lagi pada Pointer.2.Fungsi gets()
Fungsi
gets() adalah fungsi untuk mengambil input dalam satu baris. Fugnsi gets() tidak memerlukan format seperti scanf().
Contoh:
#include <stdio.h>
int main () {
char name[50], web_address[50];
printf("Nama: ");
gets(name);
printf("Alamat web: ");
gets(web_address);
printf("You entered: %s\n", name);
printf("Web address: %s\n", web_address);
return(0);
}
Hasilnya:

Saat melakukan kompilasi, kita akan mendapatkan peringatan:
warning: the `gets' function is dangerous and should not be used.
Ini bukan error, melainkan hanya peringatan saja agar tidak menggunakan fungsi
gets(). Mengapa? Karena dapat menyebabkan masalah buffer overflow pada program. Lalu bagaimana solusinya? Kita bisa menggunakan:
3. Fungsi fgets()
Fungsi
fgets() lebih aman dibandingkan gets(), karena kita bisa menentukan ukuran buffer dan sumber inputan.
Ukuran buffer adalah batas ukuran panjang string yang diinputkan. Lalu
stdin adalah sumber inputan dari keyboard. Kita juga bisa mengambil input dari file dengan fgets() dengan memasukan pointer FILE pada stdin. Untuk lebih jelasnya, mari kita lihat contohnya:#include <stdio.h>
int main(){
char name[50], email[50];
printf("Nama: ");
fgets(name, sizeof(name), stdin);
printf("Email: ");
fgets(email, sizeof(email), stdin);
printf("\n-------------------------\n");
printf("Nama anda: %s", name);
printf("Alamat email: %s", email);
return 0;
}
Hasilnya:

Pada contoh program di atas, kita menggunakan fungsi
sizeof() untuk mengambil ukuran buffer dari variabel. Ukuran ini akan menjadi batas maksimum dari inputan.
File Output
Output adalah informasi yang dihasilkan setelah dilakukan proses. Output biasanya ditampilkan ke layar komputer.
Ada dua macam fungsi yang bisa digunakan untuk menampilkan output:
1. Fungsi printf()
Fungsi
printf() merupakan fungsi untuk menampilkan output ke layar komputer. Fungsi ini terdapat pada library stdio.h. Oleh sebab itu, ketika kita diharuskan untuk menuliskan #include <stdio.h> di bagian atas program agar bisa menggunakan fungsi ini. Berikut ini struktur dasar fungsi printf():
Perhatikan:
"format" adalah sebuah teks (string) untuk ditampilkan. Lalu tanda ... akan berisi sebuah variabel atau nilai untuk ditampilkan berdasarkan format yang diberikan pada teks "format". Mari kita lihat contohnya: Buatlah sebuah program C bernama output.c, lalu isi dengan kode berikut.#include <stdio.h>
int main(){
printf("Hello, ini adalah teks output\n");
printf("Nama saya %s\n", "Dian");
printf("Usia saya %d\n", 20);
return 0;
}
Hasilnya:

Ada beberapa hal yang perlu di perhatikan… Pada fungsi
printf() kita menggunakan simbol %s, %d, dan \n untuk format teks. Mari kita bahas arti dari simbol tersebut: %sadalah simbol untuk menampilkan nilai string;%dadalah simbol untuk menampilkan nilai angka atau bilangan desimal;\nadalah simbol untuk membuat baris baru.
Simbol Arti atau
Fungsi
%c untuk
menampilkan karakter
%s untuk
menampilkan teks (string)
%d, %i untuk
menampilkan bilangan desimal
%f untuk
menampilkan bilangan pecahan
%o untuk
menampilkan bilangan oktal
%x untuk
menampilkan bilangan heksadesimal
\t untuk
membuat tabs
2. Fungsi puts()
Fungsi
puts() adalah fungsi untuk menampilkan output. Fungsi ini juga terdapat pada library stdio.h. Perbedaanya dengan printf(), fungsi puts() tidak memerlukan format. Fungsi puts() akan selalu membuat baris baru. Jadi tidak perlu menggunakan simbol \n seperti pada printf().
Contoh program:
fungsi_puts.c
#include <stdio.h>
int main(){
puts("Hello World");
puts("Nama Saya Dian");
return 0;
}
Hasilnya:

Selain fungsi
puts(), terdapat juga fungsi putchar() yang khusus untuk menampilkan satu karakter saja. Contoh:#include <stdio.h>
int main(){
putchar('A');
return 0;
}
Maka akan menghasilkan output:
A
Lalu pertanyaannya: Fungsi manakah yang harus saya pakai? Jawabannya, tergantung… Tergantung dari teks apa yang akan ditampilkan. Apabila di sana kita akan menampilkan teks dan nilai atau variabel, sebaiknya menggunakan
printf() karena bisa membuat format. Tapi kalau teks yang biasa saja, bisa pakai puts().
File Operasi
Operasi yang kita lakukan terhadap file, di antaranya adalah:
- Membuka file
- Membaca atau menulis file
- Menutup file
Membuka File
Sebelum kita membuka file, tentu harus ada filenya terlebih dahulu. Buatlah sebuah file teks menggunakan notepad. Simpan di drive C:\ dengan nama test.txt.

Python memiliki fungsi
open() untuk membuka file. Fungsi ini mengembalikan sebuah objek file yang digunakan untuk membaca atau mengubah file tersebut.>>> f = open("C:\\test.txt")
Catatan:
f = open("C:\\test.txt") memiliki dua tanda \ untuk menandai karakter escape. Bisa juga dengan menggunakan karakter raw r dengan penulisan f = open(r"C:\test.txt")
Kita bisa menyebutkan mode file saat membukanya, apakah pakai mode baca
'r', tulis 'w', atau tambah 'a'. Kita juga bisa membuka file dalam mode biner 'b'. Defaultnya adalah mode baca. Dalam mode ini, kita bisa memperoleh semua teks atau string yang ada di dalam file. Mode biner kita gunakan saat berhubungan dengan file gambar atau file exe.
Mode Deskripsi
‘r’ Membuka
file untuk dibaca. (default)
‘w’ Membuka
file untuk ditulis. Membuat file baru jika file belum tersedia atau menimpa isi file jika file sudah ada
‘x’ Membuka
file untuk pembuatan eksklusif. Jika file sudah ada, maka operasi akan gagal
‘a’ Membuka
file dan menambahkan karakter di ujung file lama (tanpa menghapus isinya). Membuat file baru bila file belum tersedia
‘t’ Membuka
dalam mode teks. (default)
‘b’ Membuka
file dalam mode biner
‘+’ Membuka
file untuk diupdate (membaca dan menulis)
Contohnya adalah seperti berikut:
>>> f = open("test.txt") # sama dengan mode 'r' atau 'rt'
>>> f = open("test.txt", 'w') # mode tulis
>>> f = open("img.jpg", 'r+b') # membaca dan menulis dalam mode biner
Menulis File
Untuk menulis ke dalam file, kita menggunakan mode
'w' pada saat membuka filenya. Atau bisa juga menggunakan mode 'a' untuk menambah isi file dari akhir file awal, tanpa menghapus atau menimpa isinya terlebih dahulu. Kita harus berhati – hati dalam menggunakan mode 'w' karena bisa menimpa file jika filenya sudah ada. Semua data di file yang tertimpa akan terhapus dan diganti dengan isi baru. Kita bisa menulis file dengan menggunakan metode write(). Metode ini mengambalikan jumlah karakter yang dituliskan ke dalam file.with open("C:\\test.txt", 'w') as f:
f.write("The new first line\n")
f.write("The new second line\n")
f.write("The new third line\n")
Pada contoh di atas kita menulis data ke file test.txt. Karena test.txt sudah ada, maka isinya akan terhapus dan diganti yang baru. Seandainya test.txt belum ada maka akan dibuat file yang baru secara otomatis. Bila Anda tidak ingin mengubah atau menimpa file, Anda bisa memilih nama lain selain nama file yang sudah eksis.
Menutup File
File yang sudah terbuka perlu ditutup kembali menggunakan metode
close(). Bila Anda tidak menutup file, maka perubahan yang Anda lakukan bisa saja hilang. Menutup file akan membebaskan memori yang terpakai.f.open("C:\\test.txt")
# melakukan berbagai operasi file
f.close()
Cara menutup file di atas kurang baik, karena jika ada error pada saat operasi file, maka program akan keluar sebelum menutup file. Cara yang lebih baik adalah dengan menggunakan blok try…finally.
try:
f = open("C:\\test.txt")
# melakukan beberapa operasi file
finally:
f.close()
Dengan begitu, kita dapat menjamin bahwa file akan tetap ditutup walaupun ada error sebelumnya.Cara lain yang lebih aman adalah dengan membuka file dengan pernyataan
with seperti contoh berikut:with open("test.txt") as f:
# lakukan operasi file
Dengan menggunakan
with kita tidak perlu menggunakan metode close() lagi, karena hal itu otomatis dilakukan oleh python.
Metode Operasi File
Ada banyak metode yang disediakan python untuk melakukan operasi file. Beberapa darinya sudah dicoba di atas. Tabel berikut menunjukkan semua operasi file di python.
Metode Deskripsi
close() Menutup file
detach() Memisahkan
buffer biner dari TextIOBase dan mengembalikannya.
fileno() Mengembalikan integer (file
descriptor) file
flush() Mengosongkan buffer aliran file
(filestream)
isatty() Mengembalikan True jika stream
file interaktif
read(n) Membaca n karakter dari file.
Bila tidak ada argumen maka dibaca seluruh isi file.
readable() Mengembalikan
True bila file bisa dibaca
readline() Membaca
dan mengembalikan satu baris file.
readlines() Membaca
dan mengembalikan semua baris sebagai satu list.
seek(offset) Mengubah
posisi kursor file ke offset byte.
seekable() Mengembalikan
True jika stream file mendukung akses random
tell() Mengembalikan posisi kursor
sekarang
truncate(size) Mengubah
ukuran stream file menjadi size byte.
writable() Mengembalikan
True jika stream file bisa ditulis.
write(s) Menuliskan string s ke file dan
mengembalikan jumlah karakter yang dituliskan
writelines(lines) Menuliskan
list lines ke dalam file
File Operation Modes
Sebelum kita mulai bekerja dengan file apapun menggunakan program komputer, kita perlu membuat file baru jika tidak ada atau membuka file yang sudah ada. Dalam kedua kasus tersebut, kita bisa membuka file dalam mode berikut
- Read-Only Mode - Jika Anda hanya akan membaca file yang ada dan Anda tidak ingin menulis konten lebih lanjut dalam file, maka Anda akan membuka file dalam mode read-only. Hampir semua bahasa pemrograman menyediakan sintaks untuk membuka file dalam mode read-only.
- Mode Write-Only - Jika Anda ingin menulis file yang ada atau file yang baru dibuat namun Anda tidak ingin membaca konten tertulis dari file tersebut, maka Anda akan membuka file tersebut dalam mode penulisan-tulis saja. Semua bahasa pemrograman menyediakan sintaks untuk membuka file dalam mode write-only.
- Read & Write Mode - Jika Anda akan membaca dan juga menulis ke file yang sama, maka Anda akan membuka file dalam mode baca & tulis.
- Append Mode - Bila Anda membuka file untuk menulis, ini memungkinkan Anda untuk mulai menulis dari awal file; namun akan menimpa konten yang ada, jika ada. Misalkan kita tidak ingin menimpa konten yang ada, maka kita buka file tersebut di append mode. Mode Append akhirnya adalah mode tulis, yang memungkinkan konten ditambahkan pada akhir file. Hampir semua bahasa pemrograman menyediakan sintaks untuk membuka file dalam append mode