Bagaimanakah `cin` mengendalikan input dalam C dan mengapakah `getline()` diutamakan untuk membaca keseluruhan baris?

Linda Hamilton
Lepaskan: 2024-10-30 09:12:27
asal
652 orang telah melayarinya

How does `cin` handle input in C   and why is `getline()` preferred for reading entire lines?

Gelagat Strim Input C dengan "cin"

Apabila membaca input menggunakan strim "cin" dalam C , adalah penting untuk memahami cara ia berinteraksi dengan pelbagai jenis data. Secara lalai, "cin" membaca perkataan pada satu masa, yang boleh membawa kepada tingkah laku yang tidak dijangka apabila berurusan dengan tatasusunan aksara atau rentetan.

Dalam contoh kod yang disediakan, kaedah "input()" dalam "String " kelas menggunakan "cin >> untuk membaca rentetan input. Walau bagaimanapun, pernyataan ini hanya menangkap satu perkataan, mengabaikan sebarang perkataan berikutnya dalam input. Akibatnya, apabila input mengandungi berbilang perkataan, seperti "steve hawking," hanya perkataan pertama, "steve," disimpan dalam tatasusunan "str".

Penyelesaian: Menggunakan getline( ) untuk Membaca Baris Lengkap

Untuk membaca baris lengkap input ke dalam tatasusunan aksara, fungsi "getline()" boleh digunakan dan bukannya "cin >>". Berikut ialah kaedah input yang dikemas kini menggunakan "getline()":

<code class="c++">void input()
{
    cout << "Enter string :";
    cin.getline(str, sizeof str);
}
Salin selepas log masuk

"getline()" mengambil dua argumen: penunjuk ke tatasusunan destinasi dan saiz tatasusunan. Ia membaca input sehingga aksara baris baharu ditemui, menangkap keseluruhan baris input dengan berkesan.

Pertimbangan Tambahan

Perlu diperhatikan bahawa menggunakan tatasusunan aksara untuk manipulasi rentetan boleh menyusahkan dan terdedah kepada kesilapan. Perpustakaan Standard C menyediakan kelas "std::string", yang menawarkan pendekatan yang lebih mantap dan selamat jenis untuk pengendalian rentetan. Daripada menggunakan tatasusunan aksara, kod itu boleh ditulis semula sebagai:

<code class="c++">#include <iostream>
#include <string>

class String
{
public:
    std::string str;

    void input()
    {
        cout << "Enter string :";
        std::getline(std::cin, str);
    }

    void display()
    {
        std::cout << str;
    }
};</code>
Salin selepas log masuk

Akhir sekali, penggunaan fail pengepala seperti "iostream.h" dan "conio.h" sudah lapuk. Pembangunan C moden harus menggunakan fail pengepala seperti "iostream" dan "conio", masing-masing.

Atas ialah kandungan terperinci Bagaimanakah `cin` mengendalikan input dalam C dan mengapakah `getline()` diutamakan untuk membaca keseluruhan baris?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan