使用没有指针的函数在c中编程并不起作用

时间:2014-11-24 10:09:44

标签: c function

我编写了一段代码,但它并没有运行。但是,编译器没有错误。我被困了,你能给我一个提示吗,我错在哪里? 我95%肯定它是关于checktable功能。 附:我知道如何使用指针来完成它,但我试着理解如何在没有指针的情况下实现它。

谢谢!

#include <stdio.h>  
#include "genlib.h"

void fillarray (int a[50])
{
    int i;
    for(i=0;i<50;i++)
    a[i]=rand()%10;
}

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

int number()
{
    int num;
    printf("Give the number!");
    num=GetInteger();
    return num;
}

void checktable (int a[50], int b[50], int ar,int count)
{
    int i;
    count=0;
    for(i=0;i<50;i++)
    if (a[i]==ar)
    {

        b[count]=i;
        count++;
    }

}
main()
{
    int i,a[50], b[50], N,count;
    fillarray(a);
    printarray(a);
    N=number();
    checktable(a,b,N,count);
    printf("the number is used %d times", count);
    printf("in places:");
    for(i=0;i<count;i++)
    printf("%d ",b[i]);

    getch();
}

2 个答案:

答案 0 :(得分:3)

方法1:“指针”方式:

在您的代码中,更改

void checktable (int a[50], int b[50], int ar,int count)

void checktable (int a[50], int b[50], int ar,int *count)

并将其称为checktable(a,b,N,&count);


方法2:“返回”方式:

否则,count中更新的checktable()将不会反映在main()中。

但是,或者(不使用指针),IMO,它总是更容易通过return语句简单地return出现次数。在这种情况下,代码看起来像

int checktable (int a[50], int b[50], int ar)
{
    int i;
    int count=0;
    for(i=0;i<50;i++)
    if (a[i]==ar)
    {

        b[count]=i;
        count++;
    }
    return count;
}

,调用将是

 count = checktable(a,b,N);

注意:初始化变量始终是一种很好的做法。

答案 1 :(得分:0)

如果您不想使用指针,则可以返回count并将其分配给count中的main变量。我在这里改进了你的代码,并在代码中的注释中解释了所有代码:

#include <stdio.h>
#include <stdlib.h> //Don't forget this header for srand and rand
#include <time.h> //For the time in srand
#include <conio.h> //For using getch()
#include "genlib.h"

void fillarray (int a[]) //leave the brackets empty
{
    int i;
    for(i=0;i<50;i++)
    a[i]=rand()%10;
}

void printarray (int a[]) //here too
{
    int i;
    for(i=0;i<50;i++)
    printf(" %d ", a[i]);
}

int number()
{
    int num;
    printf("\n\nGive the number!");
    num=GetInteger();
    return num;
}

int checktable (int a[], int b[], int ar) //Use int to return an int
                                          //No need for count parameter
{
    int i,count;
    count=0;
    for(i=0;i<50;i++)
    if (a[i]==ar)
    {
     b[count]=i;
     count++;
    }
    return count;  //returning count

}
int main() //Use int main
{
    int i,a[50], b[50], N,count;
    srand(time(NULL)); //For rand to generate random numbers
    fillarray(a);
    printarray(a);
    N=number();
    count=checktable(a,b,N); //set count to the return value of checktable
                             //Also,no need to pass count as a parameter
    printf("The number is used %d times", count);
    printf(" in places:");
    for(i=0;i<count;i++)
    printf("%d ",b[i]+1); //Don't forget +1 otherwise output might come as place 0

    getch();
    return 0; //main returns int
}