30/09/2018, 16:57
bài tập về struct chạy sai kết quả ạ
bài toán về struct: tìm kiếm theo tên sinh viên của em chạy ra kết quả sai, và còn nhiều đoạn em chưa hiểu. Ai xem giúp em với ạ. em cảm ơn!
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
/*
THAC MAC BAI TOAN.
sv *TimKiem(char *, sv *); tai sao o day truyen vao mot con tro? ma khi goi no ta khong lay dia chi cua t: if((p = TimKiem( &t, s)) != NULL)
ma lai la: if((p = TimKiem(t, s)) != NULL) chi truyen vao t??
=> bai toan van sai: khi nhap ten khong giong nhau nhung truong trinh van ra ket qua?
*/
#pragma pack (1) // tranh lam tron bo nho.
// khai bao cau truc sinhvien: ten, tuoi, ma sinh vien
struct sinhvien
{
char ht[25];
int tuoi;
}; typedef struct sinhvien sv;
sv *TimKiem(char *, sv *);
int main()
{
sv *p, s[50];
int i = 0;
char t[25];
p = s; // cho con tro p tro den mang cau truc s.
while(1)
{
printf("
Nhap vao ten sinh vien thu %d la: ", i++);
fflush(stdin);// xoa bo nho dem.
gets(t);
if(t[0] != ' ') // ten khac rong.
{
strcpy(p->ht, t); // copy ten tu t => ht
printf("
nhap tuoi: ");
scanf("%d%*c", &p->tuoi); // %*c bo qua 1 ky tu khoang trang', tranh troi lenh.
p++; // tang dia chi cua con tro p.
}
else
{
p = NULL;// ket thuc
break;
}
}
printf("
Nhap vao ten can tim: ");
fflush(stdin);
gets(t);
if( (p = TimKiem(t,s)) != NULL) // dau tien gan p = gia tri tra ve cua ham tin kiem, sau do so sanh voi NULL.
{
printf("
ho ten: %s
tuoi: %d", p->ht, p->tuoi);
}
getch();
return 0;
}
// ham tra ve 1 con tro kieu du lieu sv, co doi truyen vao la: ten va con tro p tro toi kieu du lieu sv
sv *TimKiem(char *t, sv *p)
{
// thac mac': o day dau tien la kiem tra voi p[0]???
while(p != NULL)
{
if(strcmpi(p->ht, t) == 0)
return p;
p++; // tag dia chi cua p.
}
return NULL;
}
Bài liên quan
Câu hỏi này không rõ ràng
anh ơi, ví dụ: em đã nhập dữ liệu cho sinh viên, và em nhập tên trong hàm tìm kiếm: không trùng với dữ liệu nhập thì trương trình chạy vẫn ra kết quả như này ạ.
Trong hàm tìm kiếm của e điều kiện dừng k đúng?
p luôn khác null và nó sẽ nhảy lên vô hạn, có thể nhảy tới vùng nhớ cấm và báo lỗi hoặc tràn bộ nhớ
? a thử sửa lại chạy có vẻ ổn, do e khai báo mảng 50 phần thử nên e phải giới hạn tìm trong 50 phần tử thôi.vâng, cảm ơn anh ạ