需要帮助将代码分解为较小的部分C.

时间:2015-12-08 13:01:34

标签: c

我对C很陌生,所以请保持温和,为什么我的代码不起作用,善待并帮助我弄明白为什么它没有,如果它可以缩短它而不会太复杂,请帮助。

 main.c

#include <stdio.h>
#include <stdlib.h>
#include "swap.h"
#include "magic.h"

int main(int argc, char *argv[])
{
    int i,j,count;
    int min=atoi(argv[1]);
    int max=atoi(argv[2]);

    if(min>max)
    {
        swap(&min, &max);
    }

    if (min<0)
    {
        min=1;
    }

    if(argc<2 || argc>5){exit(EXIT_FAILURE);}
    else
    {
       magic();
    }

}

Magic.c

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

magic(char *argv[])
{
    for(i = min; i<=max; i++)
    {

        count = 0;

        for(j=2; j<=i/2; j++)
        {
            if(i%j==0)
            {
                count++;
                break;
            }
        }

        if(count==0 && i!= 1 && i!= 0)
            printf("%d \n",i);
    }

    return 0;
}

3 个答案:

答案 0 :(得分:1)

尝试使用函数和有意义的名称:

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

bool is_prime (int n)
{
    int i;

    if (n < 2)
        return false;
    for (i = 2; i * i <= n; i++) {
        if (n % i == 0) {
            return false;
        }
    }
    return true;
}

// assume min <= max
void display_primes_in_range (int min, int max)
{
    int i;

    for (i = min; i <= max; i++) {
        if (is_prime (i)) {
            printf ("%d\n", i);
        }
    }
}

void swap_int (int *a, int *b)
{
    int c = *a;
    *a = *b;
    *b = c;
}

int main (int argc, char *argv[])
{
    int min;
    int max;

    if (argc != 3)
        exit (EXIT_FAILURE);

    min = atoi (argv[1]);
    max = atoi (argv[2]);

    if (min > max)
        swap_int (&min, &max);

    display_primes_in_range (min, max);

    return EXIT_SUCCESS;
}

答案 1 :(得分:0)

为简单起见,这是单个文件

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

void swap(int *a,int *b){
    int c=*a;
    *a=*b;
    *b=c;
}

void magic(int min, int max);

int main(int argc, char *argv[])
{
    int min,max;

    if(argc!=3) // (argc<2 || argc>5)
        exit(EXIT_FAILURE);

    min=atoi(argv[1]);
    max=atoi(argv[2]);

    if(min>max)
        swap(&min, &max);

    if (min<0)
        min=1;

    magic(min,max);

    return EXIT_SUCCESS;
}


void magic(int min, int max){
    int i,j,count;

    for(i = min; i<=max; i++){
        count = 0;

        for(j=2; j<=i/2; j++) {

            if(i%j==0){
                count++;
                break;
            }
        }

        if(count==0 && i!= 1 && i!= 0)
            printf("%d \n",i);
    }
}

答案 2 :(得分:0)

您的代码中有一些错误:

您尝试在函数min中使用变量maxcountmagic但是因为它们是在main函数{{}中声明的1}}没有他们的知识。

您应该更改magic功能,如:

main

和您的#include <stdio.h> #include <stdlib.h> #include "swap.h" #include "magic.h" int main(int argc, char *argv[]) { int min=atoi(argv[1]); int max=atoi(argv[2]); if(min>max) { swap(&min, &max); } if (min<0) { min=1; } if(argc<2 || argc>5){exit(EXIT_FAILURE);} else { magic(min, max); } return EXIT_SUCCESS; } 功能:

magic

#include <stdlib.h> #include <stdio.h> #include "magic.h" int magic(int min, int max) { int count; for(int i = min; i<=max; i++) { count = 0; for(int j=2; j<=i/2; j++) { if(i%j==0) { count++; break; } } if(count==0 && i!= 1 && i!= 0) printf("%d \n",i); } return 0; } 函数中,我按main更改magic();,以便将参数传递给函数,该函数可以在magic(min, max);中使用新签名magic进行检索。

由于int magic(int min, int max)函数返回一个整数,所以不要忘记在函数的签名中指定返回值。