Viết hàm trả về kiểu float khi nhập kí tự từ bàn phím

Em đang cần viết 1 chương trình nhận các số kí tự số 0->9 và kí tự “.” Từ bàn phím bằng hàm GetKey() như sau:
image
Code:

int GetKey(){	
	char key;
	key = getch();
	if(key==-32 || key==0)
	return -getch();
	else return key;
}

Sau đó thực hiện hàm:
image

float stcth;
vitri=0;
while (1)
{
	cout << "Ki tu: (0-9). Toi da: 3         ";
	key = GetKey();
	if (((key <= '9' && key >= '0' ) || key == '.')&& (vitri < 3) )
	{
		//cout << char(key);
		stcth = ??; // em can xu ly stcth dua vào char(key)
		vitri++;
		continue;
	}
	else cout<<stcth;
}

Mục đích của em là muốn viết hàm gõ kí tự từ bàn phím gồm 0->9 và dấu “.”
Điều em muốn ở đây là sau mỗi lần nhập ta sẽ lưu giá trị số thực vào biến x. Có sự ràng buộc ở đây là dấu không được xuất hiện 2 dấu “.” khi nhập. Anh/chị tìm giùm em cách giải với ạ!
làm như cách chuyển sang số nguyên dưới đây
image

Mình chưa hiểu bài này phức tạp chỗ nào?
Viết hàm isInputValid() - > bool
Gọi hàm này trước, nếu true thì mới gọi tới hàm in lết quả.

2 Likes

Cứ getline(cin, ...) rồi kiểm tra string có thoả mãn điều kiện thôi mà.

Lạ nhỉ, các số thực biểu diễn như 1. và .5 là số thực hợp lệ (cả toán học và C++).

Làm như bạn thì code kết thúc lúc nào?

2 Likes

Em sửa lại điều kiện rồi tức là chỉ cần nhập vào sao cho 2 dấu “.” không được liên tiếp.
Ở đây em chỉ gửi 1 phần code thôi nên anh cứ hiểu là. nếu em gõ vô 5 kí tự là 10.00 thì sẽ xuất ra 10.00
nhưng em muốn mỗi lần nhập kí tự vô thì x sẽ thay đổi dần và cuối cùng x=10.00( tức là 10)
và em sẽ thêm hàm cout<<x ở ngoài. Mục đích em là muốn chuyển mảng kí tự sang float (thay đổi ở đây sẽ theo mỗi lần nhập kí tự )
Hy vọng mn hiểu ý muốn của em :frowning:

Bạn sửa thẳng vào topic đi bạn.

Bạn có thể đếm số kí tự . nhập vào, hoặc đơn giản hơn là tạo 1 biến bool kiểm tra xem người dùng đã từng nhập kí tự . hay chưa.

1 Like

Điều thắc mắc đầu tiên của mình là: chẳng có biến kiểu float thì “trả về” (in ra) giá trị float kiểu gì?
In 2 biến kiểu int và 1 dấu chấm?

  • Khi chưa gặp dấu chấm thì nó là phần nguyên đấy.
  • Khi gặp dấu chấm rồi thì nó là phần thập phân.

Cách tính của 2 phần này giống nhau và giống cách tính số nguyên (int).

2 Likes

mình có khai báo float là stcth ở đầu dòng mà. Hình cuối cùng ở dưới là kiểu int (đây là cách mình chuyển các kí tự char sang số int). Và mình muốn làm tương tự đối với kiểu float (hình ở trên cùng )

Mình vẫn chưa thông chỗ này, tức là user sẽ input nhiều lần chớ ko phải là 1 lần đầu tiên là input xong?
Có 2 cases:
1/ Nếu bắt user input nhiều lần thì khi nào sẽ dừng?
2/ Nếu 1 lần thì simple quá rồi.

2 Likes

À, xin lỗi, nhìn nhầm sang hình cuối.

Tương tự như int thôi. :relieved:

2 Likes

mình muốn làm cách tương tự như int. bạn giúp mình với

Đã giúp ở đây:

2 Likes

mình có thêm biến vitri=0 đó bạn, tức lẽ sẽ nhâp được 3 lần

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