我的主要问题是编写一个C程序,该程序使用带有五个参数的void
函数:一个整数类型为T[]
的数组,其大小为M
,一个整数P
,另一个整数为N
,还有一个为Null_nbr
我不使用全局变量,而是使用指针(因为我已经在没有指针的情况下使用了(
我编写的程序不会返回任何错误或警告,但它不起作用!如果有人告诉我这个问题在我的程序中的位置,我将不胜感激。
#include<stdio.h>
void function(int [], int , int *, int *, int *);
int main() {
int M, t[M] , i, P, N, Null_nbr;
printf("enter the size of your array");
scanf("%d", &M);
printf("n enter the array's elements");
for(i = 0; i < M; i++) {
scanf("%d", &t[i]);
}
function(t, M, &P, &N, &Null_nbr);
}
void function(int t[], int M, int *P, int *N, int *Null_nbr) {
int i;
*P=0;
*N=0;
*Null_nbr=0;
for(i = 0; i < M; i++){
if(t[i] == 0)
(*Null_nbr)++;
else if (t[i] < 0)
(*N)++;
else
(*P)++;
}
printf("n P = %d N = %d and Null=%d", P, N, Null_nbr);
}
有些程序/编译器不允许像您(t[M](那样定义数组的大小,因为M不是常数值。试着这样写。int *array, size
array = (int*)malloc(size * sizeof(int))
。
它应该这样工作。
如果使用C99
声明int t[M]
时,M
缺少指定的值。导致未定义的行为。
在scanf("%d", &M);
之后移动声明
int M, i, P, N, Null_nbr;
printf("enter the size of your array");
scanf("%d", &M);
assert(M > 0);
int t[M];