Langkah-langkah untuk menghapus karakter baris baru dengan cara yang mungkin paling jelas:
- Tentukan panjang string di dalam
NAMEdengan menggunakan strlen(), header string.h. Perhatikan bahwa strlen()tidak termasuk penghentian \0.
size_t sl = strlen(NAME);
- Lihat apakah string dimulai dengan atau hanya menyertakan satu
\0karakter (string kosong). Dalam hal ini sladalah 0karena strlen()seperti yang saya katakan di atas tidak menghitung \0dan berhenti pada kemunculan pertama itu:
if(sl == 0)
{
// Skip the newline replacement process.
}
- Periksa apakah karakter terakhir dari string yang tepat adalah karakter baris baru
'\n'. Jika demikian, ganti \ndengan a \0. Perhatikan bahwa penghitungan indeks dimulai pada 0jadi kita perlu melakukan NAME[sl - 1]:
if(NAME[sl - 1] == '\n')
{
NAME[sl - 1] = '\0';
}
Catatan jika Anda hanya menekan Enter pada fgets()permintaan string (konten string hanya terdiri dari karakter baris baru) string di NAMEakan menjadi string kosong sesudahnya.
- Kita dapat menggabungkan langkah 2. dan 3. bersama-sama hanya dalam satu
ifpernyataan dengan menggunakan operator logika &&:
if(sl > 0 && NAME[sl - 1] == '\n')
{
NAME[sl - 1] = '\0';
}
- Kode yang sudah selesai:
size_t sl = strlen(NAME);
if(sl > 0 && NAME[sl - 1] == '\n')
{
NAME[sl - 1] = '\0';
}
Jika Anda lebih suka fungsi untuk menggunakan teknik ini dengan menangani fgetsstring keluaran secara umum tanpa mengetik ulang setiap waktu, berikut adalah fgets_newline_kill:
void fgets_newline_kill(char a[])
{
size_t sl = strlen(a);
if(sl > 0 && a[sl - 1] == '\n')
{
a[sl - 1] = '\0';
}
}
Dalam contoh yang Anda berikan, itu akan menjadi:
printf("Enter your Name: ");
if (fgets(Name, sizeof Name, stdin) == NULL) {
fprintf(stderr, "Error reading Name.\n");
exit(1);
}
else {
fgets_newline_kill(NAME);
}
Perhatikan bahwa metode ini tidak berfungsi jika string input telah tertanam \0di dalamnya. Jika itu terjadi maka strlen()hanya akan mengembalikan jumlah karakter sampai yang pertama \0. Tapi ini bukan pendekatan yang umum, karena fungsi membaca string biasanya berhenti pada awalnya \0dan mengambil string sampai karakter nol itu.
Selain dari pertanyaan itu sendiri. Cobalah untuk menghindari negations ganda yang membuat unclearer kode Anda: if (!(fgets(Name, sizeof Name, stdin) != NULL) {}. Anda cukup melakukannya if (fgets(Name, sizeof Name, stdin) == NULL) {}.
if (!fgets(Name, sizeof Name, stdin))(paling tidak jangan gunakan dua negasi,! dan! =)