Cách lấy giá trị biến n ra khỏi hàm trong C?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct Sinhvien{
    char hoten[30];
    char lop[10];
    int tuoi;
}SV;

void NhapDuLieu(SV x[], int *n);
void InDuLieu(SV x[], int n);
void TimSinhVien(SV x[], int n);

int main(){
    SV x[10];
    char timten[30];
    int chon, n;
    while(chon != 4){
        printf("\nChon 1 de Nhap danh sach sinh vien");
        printf("\nChon 2 de Hien thi danh sach sinh vien");
        printf("\nChon 3 de Tim kiem sinh vien theo ten");
        printf("\nChon 4 de Ket thuc");
        printf("\nMoi ban chon: "); scanf("%d", &chon);
        switch(chon){
        case 1:{
            printf("%d", n);
            NhapDuLieu(x, &n);
            printf("%d", n);
            break;

        }

        case 2:{
            InDuLieu(x, n);
            break;
        }

        case 3:{
            TimSinhVien(x, n);
            break;
        }
        case 4:
            break;
        default:
            printf("Ban da chon khong dung, moi ban nhap lai.\n");
        }
    }
    return 0;
}

void NhapDuLieu(SV x[], int *n){
    int i;

    printf("Nhap so luong sinh vien: ");
    scanf("%d", &n);
    
    for(i = 0; i < n; i++){
        printf("Sinh vien %d\nNhap ho ten: ", i + 1);
        fflush(stdin);
        gets(x[i].hoten);
        printf("Nhap tuoi: ");
        scanf("%d", &x[i].tuoi);
        printf("Nhap lop: ");
        fflush(stdin);
        gets(x[i].lop);
    }
}

void InDuLieu(SV x[], int n){
    int i;

    printf("STT \tHo Ten \tTuoi \tLop\n");
    for(i = 0; i < n; i++){
        printf("%d \t%s \t%d \t%s\n", i + 1, x[i].hoten, x[i].tuoi, x[i].lop);
    }
}

void TimSinhVien(SV x[], int n){
    int i;
    char timten[30];
    printf("Nhap ten sinh vien muon tim: ");
    fflush(stdin);
    gets(timten);

    printf("STT \tHo Ten \tTuoi \tLop\n");
    for(i = 0; i < n; i++)
        if(strcmp(x[i].hoten, timten) == 0)
            printf("%d \t%s \t%d \t%s\n", i + 1, x[i].hoten, x[i].tuoi, x[i].lop);
}

Ai xem giúp mình cách sửa bài này ntn với. Làm thế nào để lấy giá trị vào biến n khi ra khỏi hàm NhapDuLieu vậy. Ai biết giúp mình với. Cảm ơn mn :slight_smile:

  • cách 1: truyền qua reference/pointer
    Nhapdulieu(...*n)
  • cách 2: qua giá trị trả về của hàm
    int Nhapdulieu... return n
1 Like

Mình làm theo cách 1 rồi nhưng không được. Cậu xem qua code của mình đc k

Thế thì theo cách 2 đi. Không dùng con trỏ cho đỡ phức tạp :smile:

1 Like

Bài mình dùng cách 2 làm sao đc cậu ơi. :(( cậu xem code mình đi

chỗ này sửa lại là scanf("%d",n); hoặc scanf("%d",&(*n));

sửa lại: for(i=0;i<(*n);i++)

1 Like

Hay quá code chạy ngon rồi. Cảm ơn @freedom@Gio nhé :smiley:

Bạn nên nhấn vào dấu check ở bên dưới mỗi câu trả lời để cảm ơn các bạn đã giúp mình ^^

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