Hỏi cách fix lỗi skip phần tử khi dùng fgets trong C?

Xin chào tất cả mọi người, em có một bài tập có yêu cầu là viết 2 hàm bằng C:

  • Nhập vào một số nguyên n (0<n<=10) từ bàn phím
  • Nhập n xâu ký tự từ bàn phím.

Em có viết như sau:

int nhapint(){
  int n;
  printf("Nhap so nguyen n: ");
  scanf("%i",&n);
  while (n<=0||n>10){
    printf("n phai lon hon 0 va nho hon 10, vui long nhap lai: ");
    scanf("%i",&n);
  }
  return n;
}

void nhapXau(char a[][1000],int n){
  fflush(stdin);
  for (int i=0;i<n;i++){
    printf("Nhap xau thu %i: ",i+1);
    fgets(a[i],1000,stdin);
    fflush(stdin);
  }
}

Ở main thì em gọi ra như sau:

int n=nhapint();
char a[1000][1000];
nhapXau(a,n);

Nhưng khi compile và run thì nó luôn skip mất phần nhập phần tử đầu tiên như thế này:

Em đã thử dùng fflush(stdin) nhưng vẫn không giải quyết được vấn đề. Rất mong được mọi người giúp đỡ ạ. Em xin chân thành cám ơn

Câu này VS bỏ từ bản 2013 rồi bạn :slight_smile: giờ dùng getchar để khử ‘\n’ thôi.

2 Likes

Mình đang dùng gcc trên terminal của mac để compile nên không rõ có liên quan đến VS không. Cơ mà bạn có thể chỉ mình cách fix bằng getchar được không ? Mình cám ơn nhé.

Oops :smiley: dù sao thì fflush(stdin) cũng không chuẩn. Để xả ‘\n’ ra khỏi stdin thì dùng

while((c = getchar()) != '\n' && c != EOF);

với điều kiện lệnh trước phải nhập đúng.

2 Likes

Mình thử cách trên của bạn rồi nhưng có vẻ vẫn chưa sửa được lỗi :frowning:

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