Không có getchar thì bị thừa 2 chữ số 0

Em mới học C có đề bài như sau:

Em đã code xong bài này nhưng lúc đầu không có getchar nó lại chui ra 2 con 0, sau khi có getchar thì mọi thứ bình thường. Mong giải thích giúp rm với ạ. Em cảm ơn!!

#include<stdio.h>
#include<string.h>

int main(){
    int n;char a[20];
    scanf("%d", &n);
    getchar();
    while(n > 0){
        fgets(a, 20, stdin);
        int length=strlen(a);
        int i;
        int count1=0, count2=0;
        for(i=0; i<(length-1); i++){
            if(a[i]%2==0){
                count1++;
            }else{
                count2++;
            }
        }
        printf("%d %d\n", count1, count2);
        n--;
    }
}

Khi bạn nhập:

2
12345
987654

Tức là trong stdin2\n12345\n987654\n.

Sau lần scanf đầu tiên bạn lấy số 2. Thì còn \n12345\n987654\n.

fgets() nó lấy từng ký tự một cho đến khi gặp \n.

Nên lần fgets() đầu tiên thì a = "\n"stdin còn 12345\n987654\n.
=> for xong thì in ra 0 0.

Lần thứ 2 mới thực sự nhập được => a = "12345\n"
=> Giờ mới ra đúng 2 3.

Đó là những gì xảy ra khi bạn không có getchar(). :slight_smile:


Thêm getchar() vô thì nó sử lý cái \n thừa thừa kia rồi mới ra được kết quả như bạn mong muốn.

3 Likes

Rất dễ hiểu ạ, em cảm ơn!!

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