30/09/2018, 18:20

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
Cảm ơn các anh ạ

Le Hoang Tam viết 20:26 ngày 30/09/2018

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

*grab popcorn* viết 20:36 ngày 30/09/2018

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

^^

Giang Phạm viết 20:22 ngày 30/09/2018

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,

Giang Phạm viết 20:23 ngày 30/09/2018

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");
}
Le Hoang Tam viết 20:34 ngày 30/09/2018

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.

Dương Nylghara viết 20:20 ngày 30/09/2018

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

Le Hoang Tam viết 20:31 ngày 30/09/2018

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

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

Bài liên quan
0