Apabila menulis program dalam mana-mana bahasa pengaturcaraan, menerima input adalah tugas asas yang kami lakukan dalam hampir semua program. Kadangkala kami mendapat input terus daripada konsol dan kadangkala kami mendapat input daripada fail. Mendapatkan input daripada fail mempunyai faedah tertentu kerana ia tidak memerlukan kita menaipnya berulang kali dan kadangkala kita boleh menyimpan beberapa kes ujian input yang baik pada fail. Walau bagaimanapun, dalam artikel ini kita akan menumpukan pada input berasaskan konsol. Kami akan mempelajari teknik yang berbeza untuk mendapatkan input daripada pengguna dalam C++.
Terdapat beberapa cara berbeza untuk mendapatkan input daripada konsol. Sebahagian daripadanya adalah kaedah seperti C, manakala yang lain menggunakan aliran input yang wujud dalam C++. Kami akan mengupasnya satu persatu dan memberikan beberapa contoh untuk pemahaman yang lebih baik.
Dalam bahasa C, kami menggunakan fungsi scanf() untuk mengimbas input daripada konsol dalam bentuk rentetan berformat. Fungsi ini juga tersedia dalam C++, jadi untuk menerima input dalam cara yang diformat, anda boleh menggunakan kaedah scanf().
Sintaks asas kaedah scanf(), termasuk rentetan format.
scanf ( “<format string>”, <address of variable> );
scanf() penentu format format.
Penentukan format | Terjemahan bahasa Cina bagiDescription | ialah:Description |
---|---|---|
%c | Untuk input aksara tunggal | |
%s | Untuk rentetan tanpa ruang | |
%Hai | Integer yang ditandatangani pendek | |
%hu | Integer tak bertanda pendek | |
%Lf | Berganda panjang | |
%d | Integer perpuluhan (ditandatangani), dengan andaian asas 10 | |
%i | Integer (dasar pengesanan automatik) | |
%o | Integer oktal | |
%x | Integer heks | |
%p | Penunjuk | |
%f | Nombor titik terapung |
#include <iostream> using namespace std; void takeInput() { int x; char s[50]; // C like string or character array char c; float f; cout << "Enter an integer: "; scanf( "%d", &x ); cout << "\nYou have entered an integer: " << x << endl; cout << "Enter a character: "; scanf( " %c", &c ); cout << "\nYou have entered a character: " << c << endl; cout << "Enter a float value: "; scanf( "%f", &f ); cout << "\nYou have entered float value: " << f << endl; cout << "Enter a string: "; scanf( "%s", s ); //string do not need address //convert to C++ like string from C like string string SCpp; SCpp.assign(s); cout << "\nYou have entered the string: " << SCpp << endl; } int main(){ takeInput(); }
Enter an integer: 5 You have entered an integer: 5 Enter a character: K You have entered a character: K Enter a float value: 2.56 You have entered float value: 2.56 Enter a string: HelloWorld You have entered the string: HelloWorld
Dalam kaedah ini, ia berfungsi untuk jenis data lain, tetapi untuk rentetan, ia hanya menerima rentetan seperti C atau tatasusunan aksara. Untuk memaparkan rentetan menggunakan "cout" kita perlu menukarnya kepada objek rentetan seperti C++. Jika tidak, kita boleh menggunakan fungsi printf() untuk memaparkan output. Ini adalah contoh asas. Sekarang mari kita lihat kesan pemformatan rentetan dalam contoh seterusnya.
#include <iostream> using namespace std; void takeInput() { int dd, mm, yyyy; cout << "Enter a date in dd-mm-yyyy format: "; scanf( "%d-%d-%d", &dd, &mm, &yyyy ); cout << "\nThe given date is: "; printf( "%d/%d/%d", dd, mm, yyyy ); } int main(){ takeInput(); }
Enter a date in dd-mm-yyyy format: 14-10-2022 The given date is: 14/10/2022
Dalam contoh ini, kami menerima input dalam borang (dd-mm-yyyy), ia tidak akan menerima sebarang format lain untuk tiga nilai integer ini. Dan dalam output kami, kami memaparkan tarikh yang sama dalam format lain (dd/mm/yyyy). Inilah yang sebenarnya digunakan untuk input rentetan terformat. Seterusnya, kita akan melihat bentuk yang lebih mudah menggunakan aliran input "cin" untuk memasukkan secara langsung sebarang jenis data ke dalam pembolehubah yang ditentukan.
cin ialah kelas aliran input C++ yang menggunakan operator pengekstrakan >> untuk mendapatkan input daripada aliran. Operator ini secara automatik memasukkan nilai ke dalam pembolehubah yang ditentukan dengan mendapatkan input daripada konsol. Sintaksnya adalah seperti berikut.
Sintaks asas kaedah cin
cin >> <input variable name>
#include <iostream> using namespace std; void takeInput() { int x; string s; char c; float f; cout << "Enter an integer: "; cin >> x; cout << "\nYou have entered an integer: " << x << endl; cout << "Enter a character: "; cin >> c; cout << "\nYou have entered a character: " << c << endl; cout << "Enter a float value: "; cin >> f; cout << "\nYou have entered float value: " << f << endl; cout << "Enter a string: "; cin >> s; cout << "\nYou have entered the string: " << s << endl; } int main(){ takeInput(); }
Enter an integer: 8 You have entered an integer: 8 Enter a character: L You have entered a character: L Enter a float value: 3.14159 You have entered float value: 3.14159 Enter a string: WeAreLearningC++InputTaking You have entered the string: WeAreLearningC++InputTaking
Seperti pembolehubah lain, kita boleh menggunakan rentetan secara langsung dan bukannya menjadikannya sebagai tatasusunan aksara. Dalam kaedah ini, ia secara automatik memberikan input yang diberikan kepada objek rentetan. Walau bagaimanapun, terdapat masalah dengan rentetan. Kami tidak boleh memasukkan rentetan berbilang perkataan dengan cara ini. Jika kita menulis rentetan berbilang perkataan, ia hanya akan mengambil perkataan pertama. Mari kita lihat ini dalam contoh di bawah.
#include <iostream> using namespace std; void takeInput() { string s; cout << "Enter a string: "; cin >> s; cout << "\nYou have entered the string: " << s << endl; } int main(){ takeInput(); }
Enter a string: Hello World, This is a nice day You have entered the string: Hello
Untuk mengatasi masalah ini, kita perlu menggunakan fungsi getline() untuk mendapatkan rentetan yang dibatasi ruang. Dalam kaedah ini ia menamatkan pembacaan teks apabila aksara baris baharu ditemui.
getline(std::cin, <string variable>)
#include <iostream> using namespace std; void takeInput() { string s; cout << "Enter a string: "; getline(cin, s); cout << "\nYou have entered the string: " << s << endl; } int main(){ takeInput(); }
Enter a string: Hello World, Have a nice day You have entered the string: Hello World, Have a nice day
Dalam artikel ini, kami telah melihat penggunaan yang berbeza untuk membaca input pengguna menggunakan kaedah scanf() dan aliran cin. Menetapkan input kepada jenis pembolehubah lain adalah mudah. Walau bagaimanapun, penentu format %s mahupun kelas cin tidak menerima rentetan input dengan ruang. Seperti bahasa C, terdapat fungsi yang ditetapkan dalam C++ untuk membaca rentetan dengan perkataan yang dipisahkan oleh ruang. Anda boleh menggunakan kaedah getline() untuk menerima rentetan input ini. Kami juga boleh mendapatkan input daripada fail dan aliran rentetan.
Atas ialah kandungan terperinci Program C++ untuk mendapatkan input daripada pengguna. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!