Vòng for không đọc được phần tử trong mảng

E chào mọi người ạ. Tại sao chương trình dưới của em vòng for nó không đọc phần tử trong mảng được vậy ạ ? nhập phần tử ttrong mảng vào để kiểm tra thi nó ra nhap sai … mọi người giúp em với ạ. Many thanks

#include<stdio.h>;
   int main(){
   
    double Arr[50]={0.5,0.6,0.7,0.75,0.8,0.85,0.9,0.95,0.96,0.97,0.98,0.99,0.991,0.992,0.993,0.994,0.995,0.996,0.997,0.998,0.999,0.9995,0.9999};
    int i;
    double P;
    for (i=0; i<23; i++){
    	do{
    		printf("\nMoi nhap P=");
    		scanf("%lf",&P);
    		if (P!=Arr[i]){
    			printf("\nP nhap sai, moi nhap lai");
			}}
			while (P==Arr[i]);
				printf("\P nhap dung");
			
		}
	
	return 0;
}

Bạn hãy thử in ra giá trị của mảng và giá trị bạn vừa nhập xem, thế mới biết nó có đọc đúng không chứ.

Lưu ý: so sánh số thực (floatdouble) bằng phép toán == thì chả mấy khi đúng đâu.

3 Likes

nó không đọc đuọc bạn ạ nó ra 00000 hết á ;((((

Chạy thử trên GDBOnline thì ổn cả trừ điều kiện của while phải sửa lại giống với if. while(P!=Arr[i]);.

Chạy thử: https://onlinegdb.com/ogpkEhZfc

3 Likes


mình chạy như này mà nó vẫn không đọc được các phàn tử phía sau b ạ
nó chỉ đọc phần tử đầu tiên thôi =((((

1 Like


Theo mình là như này

2 Likes

Lí do bài của bạn chạy không đúng là như sau:
Ban đầu i = 0, xuống lệnh do while yêu cầu nhập P, giả sử bạn nhập P = 0.5 là đúng bằng Arr[0], khi đó nó sẽ quay lại vòng lặp do while đó mà ko thoát vòng lặp để tăng i, do đó ở lần sau vẫn là Arr[0], bạn nhập P = 0.6 là giá trị Arr[1] thì nó sẽ sai, rơi vào điều kiện if và in ra dòng yêu cầu nhập lại, thoát do while, tới lệnh in P nhập đúng, tăng i và lại vào do while rồi v.v
Còn nếu từ đầu bạn nhập không đúng Arr[0] thì nó sẽ rơi vô vòng if rồi lại như trên.
Vì vậy vấn đề của bạn là sử dụng do while chưa khéo lắm, vòng lặp nhưng biến i không đổi nên gây ra lỗi. Ở đó nếu bạn cho i++ ở do while thì nếu bạn cứ điền đúng P thì sẽ do while hoài, cho đến khi sai thì lại thoát…
Mình cũng ngẫm một chút mới chỉnh code bạn lại được, bạn xem thử

2 Likes

4 posts were merged into an existing topic: Topic lưu trữ các post off-topic - version 3

ummm. mình xem lại thấy đoạn code của bạn đúng khá dễ hiểu á. mình cảm ơn nhé <3

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