30/09/2018, 17:56
Cho em hỏi về code trong quyển Tài Liệu C chương 2
Dạ tình hình là em đang làm cái trò chơi cuối bài để kết thúc…em đọc tới khúc này thì không hiểu…mấy anh chị giải thích giùm em…tại sao trong while(getchar() != ‘ ’) lại không có câu lệnh trong đó @@
char docKytu ( )
{
char kytuNhapVao = 0;
kytuNhapVao = getchar ( ); // Doc ky tu duoc nhap dau tien
kytuNhapVao = toupper (kytuNhapVao); // Viet hoa ky tu do
// Lan luot doc tiep cac ky tu khac cho den khi gap
while (getchar ( ) != '
') ;
return kytuNhapVao; // Tra ve ky tu dau tien doc duoc
}
Với bên dưới là code của em làm để chạy trò chơi…nhưng tới lúc so sánh ký tự thì không được @@ tại sao vậy ạ…code em tự viết nên có hơi khó hiểu với chưa tối ưu…mấy anh chị thông cảm
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <ctype.h>
char kiemtra();
int main ()
{
FILE *teptin;
teptin = fopen ("D:\Source.txt" , "r");
char c = 0 ;
char array1[50] = "" ; //Lưu số dòng đếm được
char array2[50] = "" ; //Lưu từ bí mật cần đoán
char array3[50] = "" ; //Thay thế ký tự trong array2 thành * rồi hiện lên màn hình
int max = 0 ; //số dòng trong văn bản
int sobimat; //số dòng đuoc random
const int min = 1;
int len;
int j = 0 ;
while(fgets(array1 , 50 , teptin) != NULL) //Đọc số dòng trong text
{
max++;
}
srand(time(NULL)); //tạo số dòng cần đọc random
sobimat = (rand() % (max - min + 1) + min);
rewind (teptin);
for(int i = 0 ; i < sobimat ; i++) // đọc dòng được random
{
fgets(array2,50,teptin);
}
len = strlen (array2) - 1;
for(int i = 0 ; i < len ; i++) //thay the tu can doan bang ky tu *
{
array3[i] = '*';
}
printf ("
Let's Play Hangman !!!
");
printf("%s",array2);
for(int i = 10 ; i > 0 ; i-- )
{
printf("So luot hien tai cua ban la: %d
",i);
printf("Tu bi an la gi? %s
",array3);
printf("Hay doan mot chu cai: ");
kiemtra();
c = kiemtra();
while( j <= len )
{
if(c == array2[j])
{
printf("dung");
array3[j] = c;
}
j++;
}
printf("Tu can doan la: %s
",array3);
}
return 0;
}
char kiemtra()
{
char c = 0 ;
c = getchar();
while(getchar() != '
');
return c;
}
Bài liên quan
sao lại xài kiemtra() 2 lần?
sao lại sửa tên là kiemtra()? Tên dockytu() hợp lý hơn chứ?
while(getchar() != ‘\n’) tức là đọc từng ký tự một tới khi nào gặp ký tự newline \n (xuống dòng) thì dừng. Ko cần thêm câu lệnh nào nữa. Dòng này để tránh trường hợp thay vì nhập 1 ký tự duy nhất rồi nhấn enter thì người chơi lại nhập nhiều hơn 1 ký tự rồi mới enter.
dạ em đặt tên func đại thôi chứ có biết gì đâu =)) mà cái dòng kiemtra() đầu là để gọi hàm…còn cái hai là để dùng cái ký tự c được nhập
chẳng là lệnh đó bạn?
là nó đã gọi hàm rồi trả về giá trị rồi không cần gọi kiểm tra ở trên đâu.
Dạ em cảm ơn , em làm được ròi khoe hàng tí =))
link tài liệu này ở đâu vậy bạn ??