从主程序拆分多个功能

时间:2016-03-10 13:41:50

标签: c

这是我在互联网上找到的代码

/*program to add and subtract elements of two arrays.*/

#include<stdio.h>
#define MAX 20 

/*  function    :   readArray() 
to read array elements. 
*/

 void    readArray(int a[],int size) 
{ 
    int i; 
    for(i=0;i< size;i++) 
    { 
        printf("Enter %d element :",i+1); 
        scanf("%d",&a[i]); 
    } 
} 

/*  function    : printArray() 
to print array elements. 
*/
void printArray(int a[],int size) 
{ 
    int i; 
    for(i=0;i < size; i++) 
        printf("%5d",a[i]); 
} 

/*  function    : addArray(), 
to add elements of two arrays. 
*/
void addArray(int a[],int b[],int c[],int size) 
{ 
    int i; 
    for(i=0; i< size;i++) 
        c[i]=a[i]+b[i]; 
} 

/*  function    : subArray(), 
to subtract elements of two arrays. 
*/
void subArray(int a[],int b[],int c[],int size) 
{ 
    int i; 
    for(i=0; i< size;i++) 
            c[i]=a[i]-b[i]; 
} 

int main() 
{ 
    int A[MAX],B[MAX],ADD[MAX],SUB[MAX]; 
    int i,n; 


    printf("\nEnter size of an Array :"); 
    scanf("%d",&n); 

    printf("\nEnter elements of Array 1:\n"); 
    readArray(A,n); 
    printf("\nEnter elements of Array 2:\n"); 
    readArray(B,n); 

    /* add Arrays*/
    addArray(A,B,ADD,n); 
    /* subtract two Arrays*/
    subArray(A,B,SUB,n); 

    printf("\nArray elements after adding :\n"); 
    printArray(ADD,n); 

    printf("\nArray elements after subtracting :\n"); 
    printArray(SUB,n); 

    printf("\n\n"); 
    return 0; 
} 

我想将这些功能与主文件分开。

void    readArray(int a[],int size) 
{ 
    int i; 
    for(i=0;i< size;i++) 
    { 
        printf("Enter %d element :",i+1); 
        scanf("%d",&a[i]); 
    } 
} 


void printArray(int a[],int size) 
{ 
    int i; 
    for(i=0;i < size; i++) 
        printf("%5d",a[i]); 
} 


void addArray(int a[],int b[],int c[],int size) 
{ 
    int i; 
    for(i=0; i< size;i++) 
        c[i]=a[i]+b[i]; 
} 


void subArray(int a[],int b[],int c[],int size) 
{ 
    int i; 
    for(i=0; i< size;i++) 
            c[i]=a[i]-b[i]; 
} 

我知道我需要制作一个头文件,但我该怎么做?我在做头文件时所知道的就是我使用#define或常量。

btw我刚从互联网上复制了代码,作为一个例子,因为我下周将进行实际的期末考试。

感谢所有答案。试试用这个怎么做

main.c
#include<stdio.h>
#include"func.h"


int main()
{
int A[MAX],B[MAX],ADD[MAX],SUB[MAX];
int i,n;


printf("\nEnter size of an Array :");
scanf("%d",&n);

printf("\nEnter elements of Array 1:\n");
readArray(A,n);
printf("\nEnter elements of Array 2:\n");
readArray(B,n);


addArray(A,B,ADD,n);
subArray(A,B,SUB,n);


printf("\nArray elements after adding :\n");
printArray(ADD,n);

printf("\nArray elements after subtracting :\n");
printArray(SUB,n);

printf("\n\n");
return 0;
}


func.h
#pragma once
#define MAX 20
void readArray(int a[],int n);


void printArray(int a[],int n);



void addArray(int a[],int b[],int c[],int n);



void subArray(int a[],int b[],int c[],int n);






func.c
#include "func.h"
void    readArray(int a[],int n)
{
int i;
for(i=0;i< n;i++)
{
    printf("Enter %d element :",i+1);
    scanf("%d",&a[i]);

}
}


void printArray(int a[],int n)
{
int i;
for(i=0;i < n; i++)
    printf("%5d",a[i]);

}


void addArray(int a[],int b[],int c[],int n)
{
int i;
for(i=0; i< n;i++)
    c[i]=a[i]+b[i];

}


void subArray(int a[],int b[],int c[],int n)
{
int i;
for(i=0; i< n;i++)
        c[i]=a[i]-b[i];

}

我不知道这是对还是错

编辑:已解决...因为它是一个多用途文件,你应该总是返回;!

2 个答案:

答案 0 :(得分:1)

我向MikeCAT的答案添加了一些信息,这是完全正确的,但由于你是C的新手,你可能会想要更多的解释。

通过他的“包含守卫”,迈克展示了如何防止多次包含包含文件。例如,当.c文件包含.h文件(#include "myfile.h")并且.h文件也包含它(例如,收集所有包含的包含文件)时,这可能会有所不同。

在这种情况下,它不会造成伤害,但在其他情况下,它可能会造成伤害,必须防止多重包含。只有当(尚未)定义符号时,#ifdef bock才会包含在编译中。

要告诉其他编译单元(c文件)模块(myfile.c)可用的类型,函数和变量,现在指定它们。这些函数是一个函数名列表,它们的返回类型和它们的参数,每个都以分号结尾,如Mike的例子所示。

变量在它们之前用关键字extern声明,例如

extern int a_size;

这告诉编译器变量存在,但不在此编译单元中。链接器稍后将解析该变量或报告它丢失。

类型按原样声明,没有特殊关键字,例如游戏板:

typedef struct MY_BOARD {
    int n_pieces;
    int board[8][8];
} t_board;

通常首先声明类型,因此您可以声明(外部)变量。在类型是常量之前,你已经了解它们。

迈克最后关闭了他的多重包含守卫的条件编译块。

你现在写了一个好的.h文件。

答案 1 :(得分:0)

您应该在标题中的其他文件中编写要使用的函数的原型。

示例:

/* "include guard": prevent problems which come from this file included multiple times */
#ifndef ARRAY_UTIL_H_GUARD_0F1BCF9D_9429_4D9B_A05A_07BE3D527F84
#define ARRAY_UTIL_H_GUARD_0F1BCF9D_9429_4D9B_A05A_07BE3D527F84

/* declarations of your functions */
void readArray(int a[],int size);
void printArray(int a[],int size);
void addArray(int a[],int b[],int c[],int size);
void subArray(int a[],int b[],int c[],int size);

/* end of "include guard" */
#endif