Trong hàm CHECK(int n,int a[ ]) khi em return a[i] về và sau đó sử dụng câu lệnh break; mà vẫn bị lặp lại 3 lần

//Bài 143: Vi?t hàm tìm s? ch?n d?u tiên trong m?ng các s? nguyên. N?u m?ng không có giá tr? ch?n thì tr? v?  -1
// viet ham timso chan dau tien trong mang cacc so nguyen. neu mang khong cos gia tri chan thi tra ve -1
    #include<iostream>
    #include<stdio.h>
    #include<math.h>
    using namespace std;

    int nhap(int n,int a[]){
    	for(int i=0;i<=n;i++){
    		cin>>a[i];
    	}
    }

    int xuat(int n,int a[]){
    	for(int i=0;i<=n;i++){
    		cout<<a[i]<<" ";
    	}
    }
    int check(int n,int a[]){
    	int min=1000;
    	for(int i=0;i<=n;i++){
    		if(a[i]%2 ==0){
    			cout<<a[i];
    			return a[i];
    			break;
    		}
    	}
    	return -1;
    	
    }
    int main(){
    	int n,a[100];
    	int c;
    	cin>>n;
    	
    	nhap(n,a);
    	xuat(n,a);
    	
    	check(n,a);
    	c=check(n,a);
    	cout<<c<<endl<<"/";
    }

cái thứ nhất vòng lặp là i<n nhé bạn , còn return rồi thì coi như kết thúc hàm , đâu ra return còn break nhìn thế kia hình như bạn đang làm bài với đề kiểm tra và in sô chẵn nếu không có trả về -1 thì phải

2 Likes

Trong hàm CHECK(int n,int a[ ]) khi em return a[i] về và sau đó sử dụng câu lệnh break; mà vẫn bị lặp lại 3 lần

Vấn đề lặp lại 3 lần là bởi vì bạn gọi hàm hai lần đầu sẽ in ra 2 lần bởi lệnh cout<<a[i]; lần thứ 3 là bởi vì bạn đã gán c = check(n,a); trước đó rồi in ra c bởi lệnh cout<<c<<endl<<"/";
Trong một chương trình, khi gặp lệnh return chương trình sẽ kết thúc hàm đang thực hiện ngay sau đó, cho dù phần phía sau vẫn còn nhiều dòng lệnh khác nữa thì chúng cũng không được thực hiện.

2 Likes

Hàm xử lí sao lại có lệnh I/O vậy :smiley:

check(n,a);  // in a[i] lần 1
c=check(n,a); // in a[i] lần 2
cout c in c = a[i] lần ( giá trị a[i] in ra lần 3)
1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?