C在main函数中显示(print),而在自定义函数中返回值

时间:2015-01-20 16:03:15

标签: c function main

该程序需要让用户输入两个数字:主函数中的m和n。然后它需要在自定义函数中计算以m开头的所有n因子。然后它需要在main函数中显示/打印这些因子。

重要的是:您不能仅从主要功能打印自定义功能中的因子。也没有全局变量。

我的程序只返回第一个因子(输入1(m),18(n)= 1,2,3,6,9,18)

我也遇到了main函数中for()的问题,我不知道应该使用什么作为限制,因为它返回的次数比数字的因子数多很多。

#include<stdio.h>
#include <conio.h>

int toti_factori(int x,int y);

main(){
    int m,n,i;
    printf("intro m si n");
    scanf("%d %d",&m,&n);
    for(i=m;i<=n;i++)
    {
        printf("%d ",toti_factori(m,n));
    }


}

int toti_factori(int x,int y){
static int i=1;
int t=0;
    for(i=1;i<=y;i++){

        if(y%i==0){
            if(i>=x){
            return i;

            }
        }

    }
}

2 个答案:

答案 0 :(得分:0)

它只返回一个int,而不是一个int数组。我在第二个for()中的第一个循环,它返回一个值并跳过该函数。尝试将返回类型更改为int []。您无法打印任何内容,因为该方法在打印方法之前完成 编辑:

#include<stdio.h>
#include <conio.h>

int toti_factori(int x,int y);

main(){
    int m,n,i;
    printf("intro m si n");
    scanf("%d %d",&m,&n);
    for(i=m;i<=n;i++)
    {
        printf("%d ",toti_factori(m,n));
    }


}

int toti_factori(int x,int y){
static int i=1;
int t=0;
    for(int a=0;i<=y;i++){ //a does nothing

        if(y%i==0){
            if(i>=x){
            return i;

            }
        }

    }
}

答案 1 :(得分:0)

我的建议:

  1. 创建一个可以容纳所有因素的struct

  2. struct返回toti_factori的对象。

  3. 根据需要使用struct的内容。

  4. 这是一个有效的计划。

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct Factors
    {
       size_t size;
       int* data;
    } Factors;
    
    Factors toti_factori(int x, int y);
    
    int main(){
       int m, n, i;
    
       printf("intro m si n: ");
       scanf("%d %d", &m, &n);
    
       // Get all the factors in one call.
       Factors factors = toti_factori(m, n);
    
       // Print the factors.
       for ( i = 0; i < factors.size; ++i)
       {
          printf("%d ",factors.data[i]);
       }
       printf("\n");
    
       // Deallocate memory before program ends.
       free(factors.data);
    
       return 0;
    }
    
    Factors toti_factori(int m, int n){
       int count = 0;
       int index = 0;
       Factors factors;
    
       int i = 0;
    
       // Find out the number of factors.
       for ( i = m; i <= n; ++i)
       {
          if ( n%i == 0)
          {
             ++count;
          }
       }
    
       // Allocate memory for the factors.
       factors.size = count;
       factors.data = malloc(count*sizeof(*factors.data));
    
       // Gather the factors.
       for ( i = m; i <= n; ++i)
       {
          if ( n%i == 0)
          {
             factors.data[index] = i;
             ++index;
          }
       }
    
       return factors;
    }
    

    不使用struct

    的解决方案
    #include <stdio.h>
    
    int toti_factori(int x, int y);
    
    int main(){
       int m, n, i;
    
       printf("intro m si n: ");
       scanf("%d %d", &m, &n);
    
       // Print the factors.
       for ( i = m; i < n; ++i)
       {
          // Get the next factor and store it in i.
          i = toti_factori(i, n);
          printf("%d ", i);
       }
       printf("\n");
    
       return 0;
    }
    
    int toti_factori(int m, int n){
    
       int i = 0;
       for ( i = m; i <= n; ++i)
       {
          if ( n%i == 0)
          {
             return i;
          }
       }
       return i;
    }