Chào mấy bạn , chẳng qua là mình đang học về con trỏ. và có một bài tập như thế này
Viết hàm tìm kiếm một giá trị nào đó trong mảng. Chương trình phải có code minh họa.
Hàm này có dạng như sau
int* TimKiem(int *a, int n, int GiaTri)
Hàm truyền vào một mảng số nguyên (a), số lượng phần tử (n) và giá trị cần tìm kiếm.
Hàm trả về địa chỉ của phần tử = GiaTri xuất hiện đầu tiên trong mảng. Nếu không tìm
được thì trả về NULL.
Ví dụ: cho mảng a = { 5, 9, 1, 6, 7, 3, 7 }
Gọi hàm TimKiem (a, 6, 7) sẽ trả về địa chỉ của a[4] => xuất ra vị trí là 4.
Gọi hàm TimKiem (a, 6, 9) sẽ trả về địa chỉ của a[1] => xuất ra vị trí là 1.
Gọi hàm TimKiem (a, 6, 2) sẽ trả về NULL => xuất ra kết quả “không tìm thấy”.
và đây là code của mình
#include <stdio.h>
#include <stdlib.h>
int timkiem(int *,int,int);
int nhaparray(int,int);
int xuatarray(int,int);
int main()
{
int a[50],n=0,x=0;
do
{
printf("Nhap kich thuoc mang\n");
scanf("%d",&n);
}while(n<0&&n>50);
nhaparray1(a,n);
printf("mang sau khi nhap la\n");
xuatarray1(a,n);
printf("\nNhap gia tri can tim x = ");
scanf("%d",&x);
timkiem1(a,n,x);
return 0;
}
int nhaparray1(int a[],int n)
{
for(int i=0;i<n;i++)
{
printf("Nhap a[%d]: ",i+1);
scanf("%d",&a[i]);
}
}
int xuatarray1(int a[],int n)
{
for(int i=0;i<n;i++)
{
printf("%5d",a[i]);
}
}
int timkiem1(int *a,int n,int x)
{
int i=0;
for(i=0;i<n;i++)
{
if(a[i]==x)
return a[i];
printf("phan tu %d xuat hien tai vi tri %d\n",x,*(a+i));
}
}
cái vấn đề mình gặp phải là ở hàm timkiem1
lỗi đầu tiên mình gặp là khi mình đặt hàm
printf("phan tu %d xuat hien tai vi tri %d\n",x,a[i]);
ở ngoài vòng lặp thì khi chạy chương trình nó sẽ không hiện ra kết quả nào cả, chương trình sẽ đóng lại.
còn khi mình đặt hàm printf("phan tu %d xuat hien tai vi tri %d\n",x,a[i]);
, ở trong vòng lặp thì chương trình hoạt động tuy nhiên nó có một số lỗi sau,
ví dụ khi mình nhập nhập mảng có 4 phần tử gồm a={1,2,3,4}
1 khi mình nhập vào phần tử từ phần tử thứ 0 => 1, thì chương trình nó không hoạt động, còn khi mình nhập vào phần tử thứ 1 => 2 thì chương trình sẽ in ra kết quả đúng, 2 xuất hiện tại vị trí 1.
2 Nhưng bắt đầu từ phần tử thứ 2 => chương trình khi in ra kết quả sẽ in thêm một kết quả nữa
Vd; khi mình nhập vào 3 thì nó sẽ in ra kết quả là 3 ở vị trí thứ nhất, sau đó 3 ở vị trí thứ 2 .
hình dưới là kết quả khi in ra và tương tự với 4 cũng vậy.
Mình biết là khi để trong vòng lặp thì kết quả nó sẽ như vậy , nhưng nếu không để trong vòng lặp thì chương trình sẽ không hoạt động, vậy làm cách nào để hàm
printf("phan tu %d xuat hien tai vi tri %d\n",x,a[i]);
ở ngoài vòng lặp mà vẫn hoạt động được hoặc để trong vòng lặp nhưng chương trình vẫn chạy đúng,không bị lỗi Logic ?. Mong mọi người giúp mình, mình xin cảm ơn trước 
P/s mình tự học nên không có ai chỉ bảo cả, nên có thể code sẽ sai sót ,


