#include <string>
std::string input;
std::cin >> input;
Pengguna ingin memasukkan "Hello World". Tetapi cin
gagal di ruang antara dua kata. Bagaimana saya bisa cin
menerima semuanya Hello World
?
Saya benar-benar melakukan ini dengan struct dan cin.getline
sepertinya tidak berfungsi. Ini kode saya:
struct cd
{
std::string CDTitle[50];
std::string Artist[50];
int number_of_songs[50];
};
std::cin.getline(library.number_of_songs[libNumber], 250);
Ini menghasilkan kesalahan. Ada ide?
library
sehingga jelas bahwa itu adalah tipecd
getline
menjadiint
. Tentu saja itu gagal.Jawaban:
Anda harus menggunakan
cin.getline()
:sumber
char
-buffers? Ini 2011.cin.getline(input, sizeof(input));
? Juga, bukankah Anda harus memeriksa status pengembalian?sizeof(input)
sebagai pengganti 100 dalam panggilan kecin.getline()
; itu berarti Anda dapat mengubah ukuran buffer input dan hanya perlu mengubah satu baris, bukan dua baris. Perubahan 2 akan menguji pengembaliancin.getline()
dengan menggunakan, misalnya,if (!cin.getline(input, sizeof(input))) { ...handle EOF or error... }
atau sesuatu yang serupa, untuk mengingatkan OP bahwa operasi input, khususnya, rentan terhadap perilaku yang tidak terduga. Jawaban lain juga membutuhkan ini.Itu tidak "gagal"; hanya berhenti membaca. Ia melihat token leksikal sebagai "string".
Gunakan
std::getline
:Perhatikan bahwa ini tidak sama dengan
std::istream::getline
, yang berfungsi denganchar
buffer gaya-C daripadastd::string
s.Memperbarui
Pertanyaan Anda yang diedit sedikit mirip dengan aslinya.
Anda mencoba
getline
menjadiint
penyangga string atau karakter. Operasi pemformatan stream hanya berfungsi denganoperator<<
danoperator>>
. Baik menggunakan salah satu dari mereka (dan tweak sesuai untuk input multi-kata), atau gunakangetline
dan secara leksikal dikonversi menjadiint
after-the-fact.sumber
getline
mungkin termasuk baris baru terminating dalam string yang dikembalikan. Jika demikian, terserah Anda untuk menghapusnya.Perpustakaan Standar menyediakan fungsi input yang disebut
ws
, yang mengkonsumsi spasi putih dari aliran input. Anda bisa menggunakannya seperti ini:sumber
std::getline(std::cin, s)
saya akan mendapatkan sangat berantakan dan saya akan mengatakan, input terputus saat menunggu input dalamwhile
/for
loop. Opsi ini menyelesaikan masalah saya!Gunakan:
fungsi dapat ditemukan di
sumber
cin.getline
tidak ada di sistem Anda, Anda telah melakukan sesuatu yang sangat salah. Kemungkinan besar Anda memberikan argumen yang salah. Sebaiknya jangan menyalahkan orang lain atas kesalahan Anda ...Anda ingin menggunakan fungsi .getline di cin.
Ambil contoh dari sini . Lihat untuk info lebih lanjut dan contoh.
sumber
getline
. Sudah ketinggalan zaman. Gunakan gratisgetline
sebagai gantinya, yang dapat digunakan denganstd::string
. [BTW, cplusplus.com bukan sumber yang disarankan]CARA C
Anda dapat menggunakan
gets
fungsi yang ditemukan di cstdio (stdio.h in c):CARA C ++
gets
dihapus di c ++ 11.[Disarankan]: Anda dapat menggunakan getline (cin, name) yang ada di dalam
string.h
atau cin.getline (nama, 256) yang ada di dalamnyaiostream
.sumber
gets
tidak mungkin digunakan dengan aman. Itu bahkan telah dihapus sepenuhnya di C11.Saya lebih suka menggunakan metode berikut untuk mendapatkan input:
Ini sebenarnya super mudah digunakan daripada mendefinisikan panjang total array untuk string yang berisi karakter spasi.
sumber