Hàm cho phép nhập chuỗi ký tự từ bàn phím

Hàm getline

  • Khi sử dụng phải khai báo thư viện string.

Đối với C++ :

getline(std::cin,);
  • Đị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 #include using namespace std; int main() { string ten; cin.ignore(); // thêm vào để xoá bộ nhớ đệm, tránh bị trôi lệnh cout<<"Nhap ten cua ban : "<
  • 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

    15 Likes

    Hay á.Đúng cái đang cần.Mình đang tính chạy thử so sánh hàm getline với hàm gets nhưng tắm cái đã. ^^! Thanks bạn

    Hàm cho phép nhập chuỗi ký tự từ bàn phím
    Lang_Khach:

    Hay á.Đúng cái đang cần.Mình đang tính chạy thử so sánh hàm getline với hàm gets nhưng tắm cái đã. ^^! Thanks bạn

    nếu thấy hay thì cùng tạo ra nhiều thư viện nhỏ như này đi heng. hỳ hỳ! welcome!!!

    2 Likes

    không nhầm thì hàm getline làm việc với biến kiểu string, còn gets làm việc với biến kiểu con trỏ hoặc mảng ký tự, đúng k nhỉ ?

    1 Like

    Hàm cho phép nhập chuỗi ký tự từ bàn phím
    TTmagic:

    không nhầm thì hàm getline làm việc với biến kiểu string, còn gets làm việc với biến kiểu con trỏ hoặc mảng ký tự, đúng k nhỉ ?

    wiki lên có thể sửa nhé ! hỳ hỳ

    Hàm cho phép nhập chuỗi ký tự từ bàn phím
    mọi người cùng hoàn thiện mà

    câu hỏi và câu trả lời không liên quan =))

    Hàm cho phép nhập chuỗi ký tự từ bàn phím
    TTmagic:

    câu hỏi và câu trả lời không liên quan =))

    thấy sai hay thiếu xót thì mọi ng có quyền sửa nhé

    Hàm cho phép nhập chuỗi ký tự từ bàn phím
    đâu ai nỡ thấy sai mà để vậy coi sao được

    Thank bạn đã chia sẽ nhé
    Mình viết socket cho client/server mà không hiểu hàm này.hihi

    mọi người ơi, sao em dùng hàm cin.getline toàn bị lỗi ấy, ngẫm nghĩ 1 ngày rồi mà ko ra vấn đề , mn chỉ em, em dùng visual studio
    đây là code ạ

    #include #include #include #include using namespace std; typedef struct hanghoa { int stt; int soluong; int dongia; int thanhtien; }; hanghoa x; void main() { int n,i; cout << "so luong hang hoa can nhap:" << endl; cin >> n; for(i=0;inó hiện lỗi này ạ Error: No instance of overloaded function “std::basic_istream<_Elem,_Traits>::getline[with_Elem=char,_Traits=std::char_traits]” matches the argument list"

    em cảm ơn

    Hàm cho phép nhập chuỗi ký tự từ bàn phím

    @Honey_moon giúp em với

    Hàm cho phép nhập chuỗi ký tự từ bàn phím

    cin.getline sao lại đọc vào biến x kiểu int. cin.getline( char* , int size ) chứ

    1 Like

    woah, mình muốn hiển thị kết quả ra theo kiểu | “stt” | “soluong” | “đơn giá” | thành tiền " | theo kiểu danh sách ấy. nếu dùng kiểu khác int thì mình ko biết dùng kiểu dữ liệu gì để có thể dùng phép tính " x.thanhtien=x.dongia*x.soluong; "

    help me!

    Nhập dữ liệu cho biến int thì dùng cin chứ. cin>>x.stt , mà sao có 1 biến struct x mà lai dùng for nhỉ

    Hàm cho phép nhập chuỗi ký tự từ bàn phím

    1 Like

    biến đó dùng để gọi các biến trong struct mà, nếu dùng thằng cin thì cái bảng kết quả của mình nó chỉ hiển thị 1 list toàn giá trị của mặt hàng nhập cuối cùng thôi,

    thank bạn @sanegan199x nhá , hehe, mình đã hiểu ra và sửa thành công

    Hàm cho phép nhập chuỗi ký tự từ bàn phím

    có bạn nào chỉ mình cách chiaw class trong dev c++ ko

    hai cái xóa bộ nhớ đệm là fflush(stdin); và cin.ignore(); giống và khác nhau như thế nào nhỉ? vì mình để fflush(stdin); thì nó trôi lệnh không getline được, nhưng thay bằng cin.ignore(); thì lại có thể getline được !??

    Hàm cho phép nhập chuỗi ký tự từ bàn phím
    congtuyen7:

    hai cái xóa bộ nhớ đệm là fflush(stdin); và cin.ignore(); giống và khác nhau như thế nào nhỉ?

    cin.ignore() là chuẩn (lưu ý: viết ntn không triệt để), còn fflush(stdin) không phải chuẩn, và đã bị rút bỏ khỏi VS 2015 trở về sau.

    2 Likes

    đúng rồi ạ! e đang dùng VS 2017 fflush(stdin) không thể dùng được.
    @rogp10 e hỏi thêm nếu viết triệt để là như thế nào luôn ạ

    vậy làm sao để nhập số sau khi nhập chuỗi ạ?

    next page →

    Home Categories FAQ/Guidelines Terms of Service Privacy Policy

    •  Bài 7. Viết chương trình đếm có bao nhiêu khoảng trắng trong chuỗi.

    Trong ngôn ngữ lập trình C không có kiểu dữ liệu chuỗi mà chuỗi trong C là một dãy các kí tự kiểu char. Một chuỗi trong C được đánh dấu kết thúc là ‘\0’ (còn gọi là ký tự NULL trong bảng mã ASCII) và có độ dài tùy ý, điều này cũng có nghĩa chuỗi ký tự trong C là một mảng các ký tự char.

    Các Biến Chuỗi

    • Chuỗi là mảng ký tự kết thúc bởi ký tự null (‘\0’).
    • Có thể gán các hằng chuỗi cho các biến chuỗi.
    • Hằng chuỗi là một chuỗi các ký tự nằm trong dấu nháy kép.
    • Ký tự null ‘\0’ được tự động thêm vào biểu diễn bên trong của chuỗi.
    • Khi khai báo một biến chuỗi, hãy dành thêm một phần tử trống cho ký tự kết thúc.

    Khai báo

    Khai báo theo mảng

    Cú pháp:

    char [Chiều dài tối đa];

    Ví dụ: Trong chương trình, ta có khai báo:

    char Ten[12];

    Trong khai báo này, bộ nhớ sẽ cung cấp 12+1 bytes để lưu trữ nội dung của chuỗi ký tự Ten; byte cuối cùng lưu trữ ký tự ‘\0’ để chấm dứt chuỗi.

    Lưu ý:

    • Chiều dài tối đa của biến chuỗi là một hằng nguyên nằm trong khoảng từ 1 đến 255 bytes.
    • Chiều dài tối đa không nên khai báo thừa để tránh lãng phí bộ nhớ, nhưng cũng không nên khai báo thiếu.

    Khai báo theo con trỏ Cú pháp

    char *;

    Ví dụ: Trong chương trình, ta có khai báo:

    char *Ten;

    Trong khai báo này, bộ nhớ sẽ dành 2 byte để lưu trữ địa chỉ của biến con trỏ Ten đang chỉ đến, chưa cung cấp nơi để lưu trữ dữ liệu. Muốn có chỗ để lưu trữ dữ liệu, ta phải gọi đến hàm malloc() hoặc calloc() có trong “alloc.h”, sau đó mới gán dữ liệu cho biến.

    Vừa khai báo vừa gán giá trị

    Cú pháp:  char []=<”Hằng chuỗi”>

    Ví dụ:

    #include #include void main() { char Chuoi[]="sinhvientot.net website chia se kien thuc" ; printf("Vua khai bao vua gan gia tri : %s",Chuoi) ; getch(); }

    Lưu ý: Chuỗi được khai báo là một mảng các ký tự nên các thao tác trên mảng có thể áp dụng đối với chuỗi ký tự.

    Không thể cộng, trừ, nhân, chia 2 chuỗi kí tự lại bằng phép toán đơn thuần. Tất cả những điều đó phải được làm bằng các hàm riêng lẽ. Ta có thể gán một chuỗi này bằng một chuỗi khác (strcpy), so sánh 2 chuỗi kí tự với nhau theo thứ tự từ điển (strcmp), cộng 2 chuỗi với nhau (strcat),…

    Mọi hằng chuỗi đều được ngôn ngữ lập trình C lưu trữ như là một mảng các char và kết thúc bằng kí tự “\0”. Hơn nữa, một chuỗi trong chương trình chúng ta chỉ nhận được địa chỉ và chỉ đến đầu mảng lưu trữ. Việc truy xuất đến một hằng chuỗi đều được thực hiện qua một pointer chỉ đến mảng đó.

    Hàm nhập xuất một chuỗi

    Nhập chuỗi từ bàn phím

    Để nhập một chuỗi ký tự từ bàn phím, ta sử dụng hàm gets()

    Cú pháp:

    gets();

    Ví dụ:             char Ten[20]; 

    gets(Ten);

    Ta cũng có thể sử dụng hàm scanf() để nhập dữ liệu cho biến chuỗi, tuy nhiên lúc này ta chỉ có thể nhập được một chuỗi không có dấu khoảng trắng.

    Ngoài ra, hàm cgets() (trong conio.h) cũng được sử dụng để nhập chuỗi.

    #include #include void main() { char ten[50]; printf(“Nhap ten: ”); /*Không có chỉ thị & vì ten chuỗi đã là một địa chỉ*/ scanf("%s",ten); printf("Chao : %s\n",ten); getch(); }

    Kết quả thực hiện chương trình:

    Hàm cho phép nhập chuỗi ký tự từ bàn phím

     Lưu ý: Nếu dùng hàm scanf() để nhập dữ liệu và kết thúc việc nhập dữ liệu bằng phím Enter, thì lúc này phím Enter sẽ cho hai kí tự có mã ASCII là 13 và 10 trong vùng đệm. Như vậy nếu dùng hàm scanf() thì kí tự có mã ASCII 10 vẫn còn nằm trong vùng đệm. Nếu ta dùng hàm gets(chuỗi s), kí tự có mã ASCII là 10 được chuyển ngay vào chuỗi s. Tức là hàm gets sẽ lấy tất cả các ký tự trong buffer (vùng đệm) của màn hình vô chuỗi cho nên đôi khi chúng ta sẽ nhận được chuỗi không mong muốn do gets nhận những ký tự dư của các hàm nhập khác. Để tránh điều này ta dùng hàm int flushall(void) để xóa mọi buffer (vùng đệm) hoặc hàm fflush(stdin) để xóa vùng đệm bàn phím trước hàm nhập chuỗi gets (chuỗi s).        

    #include #include void main() { char ten[30]; printf(“Nhap ten: ”); flushall(); //hoặc dùng hàm fflush(studin); gets(ten); printf(“Chao :”); puts(ten); }

    Kết quả thực thi của chương trình: 

    Hàm cho phép nhập chuỗi ký tự từ bàn phím

    Nhập chuỗi kết thúc bằng phím Enter : char*gets(char*s);

    Xuất chuỗi lên màn hình

    Để xuất một chuỗi (biểu thức chuỗi) lên màn hình, ta sử dụng hàm puts().

    Cú pháp:

    puts();

    Ví dụ: Nhập vào một chuỗi và hiển thị trên màn hình chuỗi vừa nhập.

    #include #include #includeNgoài ra, ta có thể sử dụng hàm printf(), cputs() (trong conio.h) để hiển thị chuỗi lên màn hình.

    Xuất một chuỗi có xuống dòng sau khi xuất:

    int  put(const char*s); 

    int printf(“%s\n”,s);

    Xuất một chuỗi không xuống dòng sau khi xuất:

    int printf(“%s”,s);        

    int printf(s);