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;
}
viết 20:02 ngày 30/09/2018

kiemtra();
c = kiemtra();

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.

Nguyễn Hoàng Trung viết 19:59 ngày 30/09/2018

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

Nguyễn Văn Tâm viết 20:11 ngày 30/09/2018

while (getchar ( ) != ‘\n’) ;
return kytuNhapVao; // Tra ve ky tu dau tien doc duoc
}

getchar() != '\n' 

chẳng là lệnh đó bạn?

c = kiemtra();

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.

Nguyễn Hoàng Trung viết 20:08 ngày 30/09/2018

Dạ em cảm ơn , em làm được ròi khoe hàng tí =))

Văn Long viết 20:03 ngày 30/09/2018

link tài liệu này ở đâu vậy bạn ??

Nguyễn Hoàng Trung viết 20:12 ngày 30/09/2018
Hi mọi người, Hôm nay mình xin chia sẻ với các bạn 1 tài liệu hướng dẫn lập trình C mà mình sưu tầm được. Tài liệu này được viết bởi một lập trình viên người Pháp, mình và một người bạn sống ở Pháp dịch và biên soạn lại. Theo cá nhân mình thì với các bạn newbie khi mới chập chững bắt đầu lập trình luôn phải chạy ngược chạy xuôi tìm tài liệu, và tất nhiên là lần đầu tiên lúc nào cũng khó khăn đúng ko ? Một tài liệu dành cho những người hoàn toàn không có tí kiến thức gì về lập trình đối với…
Bài liên quan
0