Không thể gán như thế này được, ten là mảng kiểu char còn gan là char.
Anh sửa lại như sau
#include <stdio.h>
int main()
{
char ten[20];
char gan;
int i=0;
printf("nhap ten cua ban va ket thuc bang enter!");
while (i < 20) // de danh` 1 ky tu ket thuc chuoi '\0'
{
gan=getchar();
if(gan != '\n')
ten[i] = gan;
else
break;
i++;
}
ten[i] = 0; // ket thuc chuoi
printf("Chao %s", ten);
return 0;
}
tks a đạt nhìu nghen! thế là tối nay a đạt thấy mặt trăng trong khi vẫn ngồi máy tính giúp tụi e!
vậy mấy clip e làm bài tập đúng sai post lên đây lun a nha! e gà mờ lắm
Anh Đạt ơi,em vẫn chưa rõ hàm scanf("%c",&c) lắm. Tại sao nó lại đặt trong vòng lặp mà không đặt dưới printf???Em tưởng phải đặt ngay ở dưới nó mới biết là nó đang scanf cái hàm nào chứ ạ.
scanf không liên quan đến printf. Việc đặt sau printf chỉ giúp cho người nhập hiểu được phải làm gì. Ví dụ để nhập vào số n, thì ta nên thông báo cho người dùng
Giống y chang cái của anh ấy.
Cái em thắc mắc là mỗi lần lặp lại vòng loop, tại sao cái getchar không bắt mình nhập thêm lần nữa mà chỉ nhập lần đầu, lần sau tự gan vào mang luôn
Vậy em hiểu sai vấn đề rồi. Ở đây không phải là không bắt mình nhập thêm nhiều lần, mà vấn đề là ở đây là một khi mình nhập một chuỗi dài. Sau đó mình nhấn ENTER để truyền chuỗi đó vào bên trong buffer. Khi đó hàm getchar sẽ dần dần đọc từng ký tự trong buffer.
Cụ thể, khi anh nhập daynhauhoc.com thì chuỗi này chưa được chương trình C đọc, mà đang được lưu ở trong buffer. Lúc này hàm getchar chưa đọc cái gì cả nó vẫn chờ. Sau đó khi anh bấm ENTER. Thì chuỗi này sẽ được đưa vào trong chương trình C, và kh này getchar mới bắt đầu đọc từng ký tự một.
Điều này làm cho em nghĩ rằng getchar không bắt mình nhập thêm, bản chất là nó đã có đầy đủ ký tự trong lần Enter trước đó.