30/09/2018, 16:03

Tìm một Char(nhập từ bàn phím) bằng phương pháp tuần tự!

Em có làm bài tập về nhà code C , nhập vào 1 danh sách sinh viên , sau đó nhập tên rồi tìm trong danh sách xem có tên SV đó ko ? Rồi xuất ra . Bài em vẫn chạy nhưng bấm đúng tên nó vẫn xuất ra câu Không tìm thấy . Giúp em !

#include <conio.h>
#include <stdio.h>
#include <iostream.h>
#include <string.h>
struct SinhVien { //khai bao cau truc
    char tenSV[30];
    char maSV[10];
    char gioiTinh[10];
    int namSinh;
    float diemTb,dToan,dLy,dHoa;
};
//****************************************************
void nhap1sv(SinhVien &SV)
{
    float toan,ly,hoa;
    flushall();
    printf("Nhap ho ten Sinh Vien: ");
    gets(SV.tenSV);
    printf("Nhap ma Sinh Vien: ");
    gets(SV.maSV);
    printf("Nhap nam sinh: ");
    scanf("%d",&SV.namSinh);
    flushall();
    printf("Nhap gioi tinh: ");
    gets(SV.gioiTinh);
    printf("Nhap diem Toan: ");
    scanf("%f",&toan);
    printf("Nhap diem Ly: ");
    scanf("%f",&ly);
    printf("Nhap diem Hoa: ");
    scanf("%f",&hoa);
    flushall();
    SV.dToan=toan;
    SV.dLy=ly;
    SV.dHoa=hoa;
    SV.diemTb=(SV.dToan+SV.dLy+SV.dHoa)/3;
}
//*******************************************************
void xuat1sv(SinhVien SV)
{
    printf("Ho Ten %s || Ma %s || Nam Sinh %d || Gioi Tinh %s || Toan %.2f || Ly %.2f || Hoa %.2f || DTB %.2f",SV.tenSV,SV.maSV,SV.namSinh,SV.gioiTinh,SV.dToan,SV.dLy,SV.dHoa,SV.diemTb);
}
//*******************************************************
void nhapdssv(SinhVien SV[],int &n)
{
    for(int i=0; i<n; i++) {
        printf("Danh sach Sinh Vien: ");
        printf("
Sinh vien thu :%d ",i+1);
        nhap1sv(SV[i]);
    }
}
//*******************************************************
void xuatdssv(SinhVien SV[],int n)
{
    for (int i=0; i<n; i++) {

        printf("
");
        xuat1sv(SV[i]);
    }
}

//******************************************************
int timtuantu(SinhVien SV[], int n,char key[])
{
    for(int i=0; i<n; i++) {
        if(strcmp(SV[i].tenSV,key)==0)
            xuat1sv(SV[i]);
        break;
    }
    return -1;
}
void main()
{
    clrscr();
    SinhVien SV[100];
    char key[30];
    int n;
    printf("Nhap so luong Sinh Vien : ");
    scanf("%d",&n);
    nhapdssv(SV,n);
    xuatdssv(SV,n);
    printf("
Nhap ten Sinh Vien muon tim kiem: ");
    gets(key);
    timtuantu(SV,n,key);
    if(timtuantu(SV,n,key)==-1)
        printf("Khong tim thay Sinh Vien");
    else
        printf("Tim thay ten Sinh Vien");
    getch();
}
Đỗ Trung Quân viết 18:06 ngày 30/09/2018

Bạn xem lại từ đoạn if trong hàm main() xem

Rùa Quy viết 18:03 ngày 30/09/2018

như thế nào anh , em vọc mãi từ chìu nó ko ra nên em mới lôi lên đây hỏi ạ

Đỗ Trung Quân viết 18:09 ngày 30/09/2018

Ý mình là các phần còn lại đúng hết rồi thì kiểm tra từ chỗ if kiểm tra ngược lên mấy hàm liên quan.

Trần Hồng Phong viết 18:06 ngày 30/09/2018

@Quy_Rua

int timtuantu(SinhVien SV[], int n,char key[])
{
    for(int i=0; i < n; i++) {
        if(strcmp(SV[i].tenSV,key)==0)
            xuat1sv(SV[i]);
        break;
    }
    return -1;
}

Do bạn break ra khỏi vòng for lúc này vẫn chưa thoát khỏi hàm nên lệnh tiếp theo được gọi là return - 1. Bạn có thể thay thế break bằng return 1 chẳng hạn.

À quên chỗ phải bỏ 2 lệnh sau điều kiện vào như thế này nhé

if(strcmp(SV[i].tenSV,key)==0){
            xuat1sv(SV[i]);
            return 1;
}

Vì 2 lệnh đó chỉ được thực hiện khi điều kiện true.

Bài liên quan
0