30/09/2018, 20:57

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("
Chon 1 de Nhap danh sach sinh vien");
        printf("
Chon 2 de Hien thi danh sach sinh vien");
        printf("
Chon 3 de Tim kiem sinh vien theo ten");
        printf("
Chon 4 de Ket thuc");
        printf("
Moi 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.
");
        }
    }
    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
Nhap 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 	Ho Ten 	Tuoi 	Lop
");
    for(i = 0; i < n; i++){
        printf("%d 	%s 	%d 	%s
", 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 	Ho Ten 	Tuoi 	Lop
");
    for(i = 0; i < n; i++)
        if(strcmp(x[i].hoten, timten) == 0)
            printf("%d 	%s 	%d 	%s
", 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

Gió viết 23:13 ngày 30/09/2018
  • 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
NOName viết 23:01 ngày 30/09/2018

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

Gió viết 22:59 ngày 30/09/2018

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

NOName viết 23:02 ngày 30/09/2018

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

viết 23:12 ngày 30/09/2018

scanf("%d", &n);

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

for(i = 0; i < n; i++)

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

NOName viết 23:11 ngày 30/09/2018

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

The Wind viết 23:13 ngày 30/09/2018

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 ^^

Bài liên quan
0