VS báo lỗi LNK2005 và LNK1196 khi chạy code

Source1

#include <stdio.h>
#include<string.h>
#include"Header.h"
#define Max 100


void hamnhapmang(int a[Max], int &n)
{
	n = 0;
	while (n < 0 || n == 0)
	{
		printf_s("nhap vao so phan tu mang \n");
		scanf_s("%d", &n);
		if (n < 0 || n == 0)
		{
			printf("so ban nhap khong dung xin moi nhap lai");
		}
	};
	for (int i = 0; i < n; i++)
	{
		printf("a[%d]", i);
		scanf_s("%d", &a[i]);
	}
}
void hamxuatmang(int a[Max], int n)
{
	for (int i = 0; i < n; i++)
		printf("a[%d]=%d \n", i, a[i]);
}
int kiemtrasochinhphuong(int cp)
{
	for (int i = 1; i < cp / 2; i++)
	{
		if (i*i == cp)
			return 1;// neu la 1 thi la so chinh phuong
	}
	return 0;// neu la 0 thi khong phai so chinh phuong
}
int kiemtrasohoanhao(int hh)
{
	int s = 1;
	for (int i = 2; i < hh / 2; i++)
	{
		if (hh % i == 0)
			s += i;
	}
	if (s == hh)
		return 1;//neu 1 la so hoan hao
	else
		return 0;// neu la 0 thi khong phai la so hoan hao
}
int kiemtrasonguyento(int snt)
{
	for (int i = 2; i < snt / 2; i++)
	{
		if (snt % i == 0)
			return 0;//bang 0 neu khong phai so nguyen to
	}
	return 1;//bang 1 neu la so nguyen to
}
int kiemtrasoduongdoixung(int dx)
{
	char str[100];
	sprintf_s(str, "%d", dx);
	int n = strlen(str);
	for (int i = 0; i < (n - 1) / 2; i++)
	{
		if (str[i] = !str[n - i - 1])
		{
			return 0; // 0 thi khong phai la so doi xung
		}
	}
	return 1;//1 thi la so doi xung
}
int kiemtrasothoayeucau(int yc)//ham kiem tra so thoa man yeu cau
{
	if (kiemtrasochinhphuong(yc) == 1 || kiemtrasohoanhao(yc) == 1 || kiemtrasonguyento(yc) == 1 || kiemtrasoduongdoixung(yc) == 1)
	{
		return 1;//1 thi se dung de xap xep
	}
	else
		return 0;// 0 thi se khong sap xep
}
void hoanvi(int &x, int &y)
{
	int temp = 0;
	x = temp;
	temp = y;
	y = temp;
}
void hamsapxep(int a[Max], int n)
{
	for (int i = 0; i < n - 1; i++)
	{
		for (int j = i + 1; j < n; j++)
		{
			if (kiemtrasothoayeucau(i) == 1 && kiemtrasothoayeucau(j) == 1)
			{
				if (a[i] > a[j])
				{
					hoanvi(i, j);
				}
			}
		}
	}
}

file Main

#include "Header.h"
#include <stdio.h>
#include <math.h>
#include<string.h>
#include"Source1.cpp"
#define Max 100

int main()
{
	int a[Max], n = 0;
	hamnhapmang(a, n);
        hamsapxep((a,n);
        hamxuatmang(a,n);
	return 0;
}

Mình sửa lại cho bạn nhé.

  1. Đoạn code ở Source1.cpp hoàn toàn là C nên viết thuần C cho dễ dùng nhé
  2. Chỗ nào sửa giá trị của biến thì nên đặt (&) ở nơi cần lưu và đặt (*) ở nơi cần truy xuất
    I. File Source.c
#include <stdio.h>
#include<string.h>
#define Max 100

void hamnhapmang(int a[Max], int *n)
{
    *n = 0;
    while (*n < 0 || *n == 0)
    {
        printf("nhap vao so phan tu mang \n");
        scanf("%d", &(*n));
        if (*n < 0 || *n == 0)
        {
            printf("so ban nhap khong dung xin moi nhap lai");
        }
     };
    for (int i = 0; i < *n; i++)
    {
        printf("a[%d]", i);
        scanf("%d", &a[i]);
    }
}
void hamxuatmang(int a[Max], int n)
{
    for (int i = 0; i < n; i++)
        printf("a[%d]=%d \n", i, a[i]);
}
int kiemtrasochinhphuong(int cp)
{
    for (int i = 1; i < cp / 2; i++)
    {
        if (i*i == cp)
            return 1;// neu la 1 thi la so chinh phuong
    }
    return 0;// neu la 0 thi khong phai so chinh phuong
}
int kiemtrasohoanhao(int hh)
{
    int s = 1;
    for (int i = 2; i < hh / 2; i++)
    {
        if (hh % i == 0)
            s += i;
    }
    if (s == hh)
        return 1;//neu 1 la so hoan hao
    else
        return 0;// neu la 0 thi khong phai la so hoan hao
}
int kiemtrasonguyento(int snt)
{
    for (int i = 2; i < snt / 2; i++)
    {
        if (snt % i == 0)
            return 0;//bang 0 neu khong phai so nguyen to
    }
    return 1;//bang 1 neu la so nguyen to
}
int kiemtrasoduongdoixung(int dx)
{
    char str[100];
    sprintf(str, "%d", dx);
    int n = strlen(str);
    for (int i = 0; i < (n - 1) / 2; i++)
    {
        if (str[i] = !str[n - i - 1])
        {
        return 0; // 0 thi khong phai la so doi xung
        }
    }
    return 1;//1 thi la so doi xung
}
int kiemtrasothoayeucau(int yc)//ham kiem tra so thoa man yeu cau
{
    if (kiemtrasochinhphuong(yc) == 1 || kiemtrasohoanhao(yc) == 1 || kiemtrasonguyento(yc) == 1 || kiemtrasoduongdoixung(yc) == 1)
    {
        return 1;//1 thi se dung de xap xep
    }
    else
        return 0;// 0 thi se khong sap xep
}
void hoanvi(int *x, int *y)
{
    int temp = 0;
    *x = temp;
    temp = *y;
    *y = temp;
}
void hamsapxep(int a[Max], int n)
{
    for (int i = 0; i < n - 1; i++)
    {
        for (int j = i + 1; j < n; j++)
        {
            if (kiemtrasothoayeucau(i) == 1 && kiemtrasothoayeucau(j) == 1)
            {
                if (a[i] > a[j])
                {
                hoanvi(&i, &j);
                }
            }
        }
    }
}

II. File Main.C

#include <stdio.h>
#include <math.h>
#include<string.h>
#include"test2.c"
#define Max 100

int main()
{
    int a[Max], n = 0;
    hamnhapmang(a, &n);
    hamsapxep(a,n);
    hamxuatmang(a,n);
    return 0;
}

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