Code include file bị lỗi "undefined reference to"

Mọi người giúp mình sửa lỗi này với, kiểm tra lại nhiều lần lắm rồi mà chẳng thấy sai ở đâu cả

Mình có 3 files, nội dung ở dưới đây
Nhìn thì có vẻ ok nhg mà khi chạy thì file nguoitreoco.c cứ báo lỗi “undefined reference to ‘chonTu’”, kt mãi mà chẳng thấy lỗi sai nào, mn giúp mình với
Nội dung 3 files(xin lỗi các bạn vì nó khó nhìn quá):

nguoitreoco.c:

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

#include "danhmuc.h"

int win(int sokytuBimat[ ], long dodaiTu);
int kiemtraKytu(char kytu, char tuBimat[ ], int sokytuBimat[ ]);
char docKytu( );

int main(int argc, char* argv[ ])
{
    char kytu = 0;
    char tuBimat[100] = {0};
    int *sokytuBimat = NULL;
    long soluotDoan = 10;
    long i = 0;
    long dodaiTu = 0;
    
printf ("Chao mung den voi tro choi Nguoi treo co !\n\n ");
    

if (!chonTu(tuBimat))
    exit(0);

    dodaiTu = strlen(tuBimat);
    sokytuBimat = malloc(dodaiTu * sizeof (int));
    if (sokytuBimat == NULL)
    exit(0);


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

        sokytuBimat[i] = 0;

    while (soluotDoan > 0 && !win(sokytuBimat, dodaiTu))
    {
        printf ("\n\n Ban co %d luot doan de choi ", soluotDoan);
        printf ("\n Tu bi mat la gi ?");
    }

    for (i = 0 ; i < dodaiTu ; i++)
    {
        if (sokytuBimat[i])
            printf ("%c", tuBimat[i]);
        else
            printf ("*");
    }

    printf ("\n Xin moi ban doan mot ky tu: ");
    kytu = docKytu( );
    if (!kiemtraKytu(kytu, tuBimat, sokytuBimat))
    {
        soluotDoan--;
    }
    if (win(sokytuBimat, dodaiTu))
        printf ("\n\n Chuc mung, ban da chien thang ! Tu bi mat la : %s", tuBimat);
    else
        printf ("\n\n Xin chia buon, ban da thua !\n\n Tu bi mat la : %s", tuBimat);
    free (sokytuBimat);

    return 0;
}
char docKytu( )
{
    char kytuNhapVao = 0;
    kytuNhapVao = getchar( );
    kytuNhapVao = toupper(kytuNhapVao);
    while (getchar( ) != '\n') ;
    return kytuNhapVao;
}
int win(int sokytuBimat[ ], long dodaiTu)
{
    long i = 0;
    int nguoichoiChienThang = 1;
    for (i = 0 ; i < dodaiTu ; i++)
    {
        if (sokytuBimat[i] == 0)
            nguoichoiChienThang = 0;
    }
    return nguoichoiChienThang;
}
int kiemtraKytu(char kytu, char tuBimat[ ], int sokytuBimat[ ])
{
    long i = 0;
    int kytuChinhXac = 0;

for (i = 0 ; tuBimat[i] != '\0' ; i++)
{
    if (kytu == tuBimat[i])
    {
        kytuChinhXac = 1;
        sokytuBimat[i] = 1;
    }
}
    return kytuChinhXac;
}

danhmuc.c:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include "danhmuc.h"

int chonTu(char *tuDuocChon)
{
    FILE* danhmuc = NULL;
    int soThuTuCuaTu = 0, soThuTuCuaTuDuocChon = 0, i = 0;
    int luuKytu = 0;
    danhmuc = fopen("danhmuc.txt", "r");
    if (danhmuc == NULL)
    {
        printf ("\n Khong the mo danh muc tu bi mat");
        return 0;
    }
    do
    {
        luuKytu = fgetc(danhmuc);
        if (luuKytu == '\n')
        soThuTuCuaTu++;

    } while(luuKytu != EOF);

     soThuTuCuaTuDuocChon = tuNgauNhien(soThuTuCuaTu);
     rewind(danhmuc);
     while (soThuTuCuaTuDuocChon > 0)
     {
        luuKytu = fgetc(danhmuc);
        if (luuKytu == '\n')
            soThuTuCuaTuDuocChon--;
     }
    fgets(tuDuocChon, 100, danhmuc);
    tuDuocChon[strlen(tuDuocChon) - 1] = '\0';
    fclose(danhmuc);
    return 1;
}

int tuNgauNhien(int sothutuLonNhat)
{
    srand(time(NULL));
    return (rand( ) % sothutuLonNhat);
}

danhmuc.h:

#ifndef DANHMUC_H_INCLUDED
#define DANHMUC_H_INCLUDED

int chonTu(char *tuDuocChon);
int tuNgauNhien(int sothutuLonNhat);

#endif // DANHMUC_H_INCLUDED

Dòng này thiếu cái gì đó rồi bạn ơi…

image

3 Likes

Hi No Name.
Bạn tìm trên mạng báo lỗi “undefined reference to ‘chonTu’” chưa ?

Mình tìm rồi mà chẳng có cái nào giúp đc cả

ai đó xóa nhầm của mình đấy
cám ơn bạn vì đã nhắc

Hi No Name.
Bạn tìm thấy báo lỗi đó nói gì ?

Nó bảo là khai báo thiếu thông tin hoặc prototype thì phải

Đã #include "danhmuc.h" chứa hàm chonTu() mà còn khai báo int chonTu(char *tuDuocChon);nguoitreoco.c, nhưng không định nghĩa, lộn xộn vậy?

3 Likes

Lúc đó mình thử xem có sửa đc lỗi ko rồi quên mất ko xóa đi, sorry mn

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