Thắc mắc về hàm getchar()

Cho em hỏi: trong video dạy C số 25 của anh Đạt…có ví dụ về một hàm nhập tên…em thấy ban đầu ảnh tạo một char c…rồi c = getchar();…sau đó mới gán chuCaiBiMat[i] = c;…
Em muốn hỏi là tại sao không gán thẳng chuCaiBiMat[i] = getchar(); luôn mà phải thông qua C :v mặc dù code em chạy sai nhưng em không biết là tại sao sai…nhờ anh chị giải đáp :smile:

do {
    chuCaiBiMat[i] = getchar();
    i++;
} while( chuCaiBiMat[i] != '\n');

Làm như thế này nghĩa là hàm getchar() lấy 1 kí tự bỏ vào chuCaiBiMat[i] nhưng trong while nó lại kiểm tra chuCaiBiMat[i+1].

Còn cách của anh Đạt mình nghĩ là nhập vào biến char c, để trong while anh Đạt sẽ kiểm tra biến c.

2 Likes

getchar() đọc lấy từ stdin 1 ký tự rồi trả về 1 giá trị kiểu int.
Theo mình bạn nên sửa lại là while( (chuCaiBimat[i++] = (char)getchar()) != '\n'); chuCaiBiMat[i] = '\0';

1 Like

Bạn sai ở chỗ:
Sau khi gán: chuCaiBiMat[ i ] = getchar();
thì : i++
Do đó ở Whilel(…) nó sẽ kiểm tra phần tử phía sau phần tử vừa được gán chuCaiBiMat[ i + 1] mà phần tử này thì chưa có giá trị xác định nên sẽ lỗi…
Bạn có thể sửa như bạn Sanegan199x đó.

1 Like

Em hiểu rồi :blush: đa tạ mấy anh…

Kiểm tra biến C để làm gì ạ @@

thì trong code của anh Đạt,
sau khi gán chuCaiBiMat[i] = c
thì i++
nên nếu trong while ta kiểm tra chuCaiBiMat[i] thì lại sai như trên, nên phải kiểm tra kí tự C
Nói chung khi code bạn cứ nháp ra giấy cái sơ đồ chạy chương trình ấy…sẽ thấy nó dễ nhìn hơn

1 Like

Đã thông :v cảm ơn mấy anh

2 posts were merged into an existing topic: Topic này chứa các post được cho là Off-topic

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