Nhập chuỗi bị thiếu 1 lần nhập

#include <iostream>
#include <string.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;

int main(int argc, char** argv) {
	int n;
	cout<<"Nhap so nguoi:?";
	cin>>n;
	char **p1=new char*[n];
	for (int i=0;i<n;i++){
		*(p1+i)=new char[225];
	}
	for (int i=0;i<n;i++){
		gets(*(p1+i));
	}
	for (int i=0;i<n;i++){
		cout<<*(p1+i)<<endl;
	}
	for (int i=0;i<n;i++){
		
		cout<<*(p1+i)<<endl;
	}
	return 0;
}

Tại sao nhập được 4 người chứ không phải 5 người ạ? ??? Em cảm ơn !

Là do dòng này của bạn á.

  • Sau khi bạn nhập n thì bạn có nhấn Enter

  • Phím Enter đó đã để lại trong stream ký tự thừa là '\n'

  • Trong lần gets() đầu tiên thì thấy ký tự \n nên máy đã tưởng rằng bạn không nhập gì và nhấn Enter luôn, thế là chuỗi đầu tiên là một chuỗi rỗng.

Hướng xử lý :point_right: tiêu diệt thằng \n thừa thãi kia đi.

  • Đơn giản là gg search: How to clear buffer in c++.

  • Đơn giản hơn là mình đưa bạn luôn :laughing:. Thêm một trong hai dòng :point_down: ngay sau cin >> n;

    •  cin >> n;
       cin.ignore();
      
    •  cin >> n;
       while (getchar() != '\n');
      
4 Likes

cảm ơn anh rất nhiều

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