Hướng dẫn sử dụng getline và fget để nhập chuỗi trong c++

Hướng dẫn sử dụng getline và fget để nhập chuỗi trong c++

Nếu bạn đang gặp vấn đề trong việc nhập giá trị trong C++? Green House sẽ hướng dẫn bạn cách sử dụng hàm getline()fget() trong việc nhập giá trị trong c++ mà không bị trôi lênh, hoặc bị lỗi. Để giải quyết vấn đề về xuất nhập chuỗi trong C++ có thể xem qua bài viết này. Chỉ với 3 phút đọc bài viết, bạn có thẻ sử dụng getline và fget để nhập dữ liệu trong C++.

Hướng dẫn Cách nhập chuỗi trong c++ dùng hàm getline:

Cú pháp: getline(std::cin, name);

Lưu ý trước khi dùng câu lệnh getline thì bạn phải khai báo thư viện string.

Đây là ví dụ về khai báo thư viện string và sử dụng getline


#include <iostream>
#include<string>
using namespace std;

int main()
{
string s;
getline(cin, s);
cout <<s <<"Ban vua nhap la: " <<endl;
system("pause");
return 0;
}

Sau khi chạy chương trình thì mình nhập vào xin chao cac ban

 
xin chao cac ban
Ban vua nhap la: xin chao cac ban

Đối với nhập 1 giá trị thì không bị trôi lệnh, nhưng khi bạn nhập nhiều chuỗi hãy đề phòng bị trôi lệnh. Mình sẽ giải thích cho các bạn các tình huống bị trôi lệnh và làm cách nào để khắc phục điều này.
Các bạn hãy xem qua mẫu ví dụ sau

 

#include <iostream>
#include<string>
using namespace std;
 
int main()
{
    int tuoi;
    string ten;
    cin >> tuoi;
    getline(cin, ten);
    cout <<"Tuoi: "<< tuoi<<endl;
    cout << "Ten: " << ten << endl;
    system("pause");
    return 0;
}

Sau đó các bạn chạy code, và nhập giá trị

 
15
Tuoi: 15
Ten:

Sau khi nhập số 15 thì không thể nhập được chuỗi và chương trình tự kết thúc. Lí do là sau khi nhập 15 bạn nhấn phím enter thì bộ nhớ đệm sẽ lưu hai giá trị là 15 và ‘/n’ (máy tính hiểu là kí tự xuống hàng). Nó sẽ gắn giá trị 15 cho biến tuoi và giá trị ‘/n’ cho chuỗi ten. Để khắc phục điều này thì trước khi nhập chuỗi ta phải xóa bộ nhớ đệm bằng câu lệnh cin.ignore
Cách sử dụng câu lênh cin.ignore


#include <iostream>
#include<string>
using namespace std;
 
int main()
{
    int tuoi;
    string ten;
    cin >> tuoi;
    cin.ignore; //Dùng để xóa bộ nhớ đệm
    getline(cin, ten);
    cout <<"Tuoi: "<< tuoi<<endl;
    cout << "Ten: " << ten << endl;
    system("pause");
    return 0;
}

Và đây là kết quả sau khi dung câu lệnh cin.ignore


15
tam
Tuoi: 15
Ten: tam

Vậy qua ví dụ này các bạn đã hiểu rõ thế nào là bị trôi biến, bị trôi chuỗi khi nhập liệu trong C++.

Cách nhập chuỗi trong c++ dùng hàm gets

Nếu bạn khai báo là một con trỏ char hay một mảng char thì bạn có thể dùng hàm gets() để nhập.
Ví dụ cách sử dụng hàm gets()


 
#include <iostream>
#include<string>
using namespace std;
 
int main()
{
    char *s = new char[100];
    gets(s); //Dùng để nhập
    cout <<"Ban vua nhap la: ";
    cout << s;
    system("pause");
    return 0;
}
 

Nhưng nếu bạn biên dịch chương trình trên bằng Visual Studio thì sẽ bị lỗi ngay. Lý do bị lỗi là chương trình không thể biết bạn nhập bao nhiêu kí tự. Vì vậy bạn có thể nhập bằng hàm fgets() thay vì hàm gets() .

Cú pháp nhập: fgets( name, count, file) trong đó

  • name là tên biến cần nhập.
  • count là số kí tự tối đa nhập vào.
  • file là tên file cần nhập, trong trường hợp này ta sẽ dùng stdin.

Tham khảo ví dụ nhập chuỗi trong C++ sau:


 
#include <iostream>
#include<string>
using namespace std;
int main()
{
    char* s;
    s = new char[100];
    fgets(s, 100, stdin);
    cout << "Ban vua nhap la: ";
    cout << s;
    system("pause");
    return 0;
}
 

Và dưới đây là kết quả


xin chao
Ban vua nhap la: xin chao

Vậy mình vừa hướng dẫn xong các bạn cách nhập chuỗi trong C++ bằng 2 cách getlinefget()