Cách nhập chuỗi

Anh ơi, cho em hỏi:
Em khai báo thế này:
char *a;
a = new char[100];

làm thế nào để nhập kí tự vào chuỗi a ?

Em mới học nên còn gà lắm ạ. mong các anh chỉ giáo thêm :smile:
Cảm ơn các anh ạ :smile:

getline (cin, a) thì báo lỗi vì a phải là 1 string :frowning:

thì bạn tạo a là 1 string (nếu là c++)

string a
getline(cin,a);

Còn nếu là mảng ký tự thì dùng

cin.getline(a)

hoặc đơn giản là cin >> a;

Nếu trong C thì dùng

scanf("%s",a); // đọc đến dấu cách
hoặc scanf("%[^\n]",&a); // đọc tới khi gặp kí tự xuống hàng thi thôi

^^

1 Like

Hàm getline

Khi sử dụng phải khai báo thư viện string.
Đối với C++ :

cấu trúc :

getline(std::cin,<bien>);

Định nghĩa : thuộc lớp namespace std. Có chức năng nhận các thông tin từ bàn phím qua hàm ( std::cin ) sau đó chuyền vào biến chỉ định.
ví dụ : Hãy xuất ra ngoài 1 biến trong đó sở hữu tên của bạn từ bàn phím.

#include<iostream>
#include<string>
using namespace std;
int main()
{
  string ten;
    cout<<"Nhap ten cua ban :  "<<endl;
  fflush(stdin);  // thêm vào để xoá bộ nhớ đệm, tránh bị trôi lệnh
    getline(std::cin,ten);
    cout<<"xin chao ban "<<ten<<" den voi ngon ngu lap trinh c/c++!!!"<<endl;
    return 0;
}

Lời khuyên : hàm getline sử dụng dưa trên việc thông qua lưu trữ giá trị hàm cin nhận vào. Ở đây cin chỉ nhận từng lần nhập liệu sau đó sẽ kết thúc khi gặp khoảng trắng hay xuống hàng. vì thế getline lưu trư toàn bộ thông tin và truyền vào biến.
Lưu ý : Việc sử dụng hàm getline có thể gây mất biến khi nhấn enter nghĩa là nếu bạn tạo 1 biến có giá trị số sau đó bạn getline và in 1 chuỗi ký tự.
Nên xoá bộ nhớ đệm trước khi getline để tránh lỗi.

std::fflush(stdin);

C

Thư viện < stdio.h>
cấu trúc ssize_t getline(char ** ptr, size_t *n,FILE * stream);
Trong C thì nó sẽ đọc 1 dòng. Nếu *n < số kí tự( bao gồm ‘\n’) thì nó sẽ gọi realloc *ptr và thay đổi *n.
giá trị trả về là số kí tự được đọc. Hoặc nếu có lỗi sẽ trả về -1

ps: của bác Honey_moon,

nhưng mình thích kiểu của @drgnz hơn vừa nhanh vừa gọn đỡ dài dòng
ví dụ như:

#include<iostream>
using namespace std;
void main()
{
	char *a;
	a = new char[100];

	cin >> a;
	cout << a;
	system("pause");
}

Mấy anh ơi…
Vấn đề ở đây của em là
Class sinhvien{
Private: char* ten, char * mssv…;
Public:
Void nhapten(char* ten, char mssv…)
};

Đề là kiểu char * và phải dùng mảng động cấp phát k thừa k thiếu.
:frowning:

Đã học class thì dùng string đi em :slight_smile:

ĐỀ yêu cầu làm = char * anh ơi :frowning:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?