Kí tự '!' bị nhảy khi code với lệnh getchar

Các bạn ơi mình đang mắc phải vấn đề này!
Mình đang xem bài 25 getchar() của anh Đạt thì mình nhận thấy có 1 cái gì đó rất kì kì
Sau khi mình build&run thì nó không error hay warning nhưng mình thấy là lúc đầu printf có dấu chấm than “!” cuối câu nhưng Run xong thì dấu chấm than đó nhảy xuống và nằm lẻ loi ở dưới cùng và mình chẳng hiểu vì sao =.=
Các bạn giúp mình với nhé

int main(int argc, char *argv[])
{
    char c;
    char ten[20];
    int i = 0;
    printf("Hay nhap ho & ten cua ban va an ENTER de ket thuc!\n");
    do
    {
        c = getchar();
        ten[i]= c;
        i++;
    }while(c!='\n');
    ten[i]= 0;
    printf("Xin chao %s !", ten);
    return 0;
}

Vấn đề nằm trong vòng lặp của bạn, các ký tự được đưa vào mảng ten[20] rồi mới check xem nó có phải là ‘\n’ hay không. Nếu muốn sửa thì có 2 cách (có thể nhiều hơn, tùy thuộc vào độ sáng tạo của bạn):

  • ten[i] = 0 => ten[i-1] = 0: biến i đã tăng 1 trước khi rời vòng lặp nên nó không trỏ vào ký tự ‘\n’.
  • check c != '\n' trước khi đưa vào mảng.
1 Like

KK Mình làm được rồi :smiley: cám ơn bạn đã chỉ giáo

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