C 在主函数中显示(打印),而在自定义函数中返回值
C show (print) in main function , while values returned in custom one
这个程序需要让用户在main函数中输入两个数字:m和n。然后它需要在自定义函数中计算从 m 开始的 n 的所有因子。然后它需要 show/print 主函数中的那些因素。
重要的是:你不能从自定义函数中打印因子,只能从主函数中打印。也没有全局变量。
我的程序只有returns第一个因数(应该输入1(m), 18(n) = 1,2,3,6,9,18)
我也有主函数中 for() 的问题,我不知道我应该使用什么作为限制,因为它 returns 比因子的数量多很多倍有。
#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;
}
}
}
}
它只是return一个整数,而不是一个整数数组。我在第二个 for() 中的第一个循环中,它 returns 一个值并跳过该函数。尝试将 return 类型更改为 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;
}
}
}
}
我的建议:
创建一个可以容纳所有因子的struct
。
Return 来自 toti_factori
的 struct
的对象。
根据需要使用struct
的内容。
这是一个工作程序。
#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;
}
这个程序需要让用户在main函数中输入两个数字:m和n。然后它需要在自定义函数中计算从 m 开始的 n 的所有因子。然后它需要 show/print 主函数中的那些因素。
重要的是:你不能从自定义函数中打印因子,只能从主函数中打印。也没有全局变量。
我的程序只有returns第一个因数(应该输入1(m), 18(n) = 1,2,3,6,9,18)
我也有主函数中 for() 的问题,我不知道我应该使用什么作为限制,因为它 returns 比因子的数量多很多倍有。
#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;
}
}
}
}
它只是return一个整数,而不是一个整数数组。我在第二个 for() 中的第一个循环中,它 returns 一个值并跳过该函数。尝试将 return 类型更改为 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;
}
}
}
}
我的建议:
创建一个可以容纳所有因子的
struct
。Return 来自
toti_factori
的struct
的对象。根据需要使用
struct
的内容。
这是一个工作程序。
#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;
}