Thắc mắc hàm nhập chuỗi trong giáo trình C++ (Thầy Ất)

Mọi người ơi, mình đọc function này trong sách của thấy Ất( trang 273) nhưng mình không hiểu, tại sao là mảng str[0] hay tg[0], cũng chưa rõ tại sao phải cần thêm mảng tg trong hàm này, mọi người giúp mình với nhé.

void getstr(char *str,int n)
{
char tg[21];
while(1) // Bỏ qua Enter và nhập tối đa n-1 ký tự
{
cin.get(str,n);
if (str[0])
break;
else
cin.ignore();
}
while(1) // Loại các ký tự còn lại ra khỏi dòng nhập cin
{
cin.get(tg,20);
if (tg[0]==0)
{
cin.ignore();
break;
}
}
}

Bởi vì những kí tự thừa sẽ ảnh hưởng đến những lệnh nhập phía sau. Khi bộ đệm rỗng thì cin mới yêu cầu nhập từ bàn phím :smiley:

Đọc thêm: https://en.cppreference.com/w/cpp/io/basic_istream/getline (phương thức getline sẽ khác với hàm getline)

6 Likes

Bạn có thể làm cụ thể hơn các dòng lệnh giúp mình được không.
str[0] = 0 là ký tự enter à? mình thấy bằng 10 là new line nên không chắc chỗ này.
Có phải là khối while(1) lần 1 là thực hiện nhập n ký tự, còn đoạn này

if (str[0])
break;
else
cin.ignore();

Thì mình chưa hiểu.

Còn khối lệnh while(1) lần 2 là sau khi nhập chuỗi str trên, nhấn enter là ký tự tự đầu tiên bằng 0 thì ignore để bộ đệm rỗng, có thể nhập chuỗi ký tự khác sau đó.
Mình nghĩ vậy đúng chưa nhỉ, mọi người góp ý giúp mình với nha.

1 Like

if(str[0]) (ngầm hiểu là khác 0) là kiểm tra xem chuỗi có khác rỗng ko :smiley: Dòng trống có hai ý nghĩa khác nhau ở hai đoạn mã.

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