gpt4 book ai didi

c - C-错误:下标值既不是数组也不是指针

转载 作者:行者123 更新时间:2023-12-04 12:34:11 27 4
gpt4 key购买 nike

/*
* File: main.c
* Author: matthewmpp
*
* Created on November 7, 2010, 2:16 PM
*/

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

/*
prime numbers.
version4
should tell whether a number is prime or not prime.
by using other prime numbers.
*/

int input_func() {
char line[100];
int n_input;

while (1) {
printf("Please enter a whole number.\n");
fgets(line, sizeof (line), stdin);
sscanf(line, "%d", &n_input);

if (n_input >= 0)
break;

return (n_input);
}
}

int ifstatements_func(n_ifstate)
int n_ifstate;
{
if (n_ifstate == 0) {
printf("The number, %d, is not prime and has no factors.\n", n_ifstate);
exit(1);
}

if (n_ifstate == 1) {
printf("The number, %d, is not prime.\n", n_ifstate);
printf("The factors of %d, is %d.\n", n_ifstate, n_ifstate);
exit(1);
}

if (n_ifstate == 2) {
printf("The number, %d, is a prime.\n", n_ifstate);
printf("The factors of %d, are 1 and %d.\n", n_ifstate, n_ifstate);
exit(1);
}
if (n_ifstate == 3) {
printf("The number, %d, is a prime.\n", n_ifstate);
printf("The factors of %d, are 1 and %d.\n", n_ifstate, n_ifstate);
exit(1);
}
return (n_ifstate);
}

int square_root_func(n_prmfnc)
int n_prmfnc;
{
int i; //counter

float sq_root_f;
int sq_root_i;

int primes[100];
int length_primes;

primes[0] = 2; /*first prime is 2.*/
primes[1] = 3; /*second prime is 3.*/
length_primes = sizeof (primes);

//printf ("before.sq_root.value of n_prmfnc=%d\n", n_prmfnc);
sq_root_f = sqrt(n_prmfnc);
sq_root_i = sq_root_f;
//printf ("prmfnc.after.sq_root\n");
//printf ("value of sq_root=%.3f\n", sq_root_f);
//printf ("value of sq_root=%d\n", sq_root_i);

return (sq_root_i);
}

int prime_func(sq_root_pf, n_pf)
int sq_root_pf;
int n_pf;
{
//printf ("in.pf.beginning.of.func.sq_root_pf=%d\n", sq_root_pf);
//printf ("in.pf.beginning.of.func.n_pf=%d\n", n_pf);

int factor_counter = 0;
int factor_temp;
int prime_counter = 0;
int prime_flag = 0;

int primes_pf[100];
int length_primes_pf = 0; //counter
int i; //counter

primes_pf[0] = 2;
primes_pf[1] = 3;
primes_pf[2] = 5;

length_primes_pf = 3;
//printf("length_primes_pf=%d\n", length_primes_pf);

//printf ("before.for.in.pf\n");
for (i = 0; i <= length_primes_pf; ++i) {
//printf ("after.for.in.pf\n");
if (primes_pf[i] == 0)
printf("primes_pf=0");
else {
if (primes_pf[i] <= sq_root_pf) {
//printf("primes_pf.i=%d, sq_root_pf=%d\n", primes_pf[i], sq_root_pf);
//printf("before.modulus.in.pf\n");
factor_temp = n_pf % primes_pf[i];
//printf("after.modulus.in.pf\n");
//printf("value.of.factor_temp=%d\n", factor_temp);
if (factor_temp == 0) {
++factor_counter;
//printf("value.factor_counter=%d\n", factor_counter);
} else
++prime_counter;

if (factor_counter == 0 && prime_counter > 0) {
prime_flag = 1; /*yes, number is prime.*/
primes_pf[length_primes_pf + 1] = n_pf;
//printf("length_primes_pf=%d\n", length_primes_pf);
}
}

}
}

if (prime_flag == 1) {
printf("The number, %d, is prime.\n", n_pf);
printf("The factors of %d, is 1 and %d.\n", n_pf, n_pf);
exit(0);
} else
printf("The number, %d, is not prime.\n", n_pf);

if (prime_flag == 0)
pfactorization (primes_pf, length_primes_pf, n_pf);

return (prime_flag);
}

int pfactorization(primes_fac, length_primes_fac, n_fac)
int primes_fac[];
int length_primes_fac;
int n_fac;
{
int i;
int j;

int result;
int n_temp;

int z_array;
int length_z_array=0;

for (i=0; i<=length_primes_fac; ++i) {
result = n_fac%primes_fac[i];
if (result == 0) {
n_temp = n_fac/primes_fac[i];
z_array[length_z_array]=primes_fac[i];
++length_z_array;
}
}

printf ("The prime factorization is:");
for (j = 0; j < length_z_array; ++j)
printf("%d\n", z_array[j]);
}

int factors_func(n_ff)
int n_ff;
{
int i;
int j;

int result;

int factors[100];
int length_factors = 0;

for (i = 2; i < n_ff; ++i) {
result = n_ff % i;
if (result == 0) {
factors[length_factors] = i;
++length_factors;
}
}

printf("The factors for %d are:\n", n_ff);
printf("1\n");

for (j = 0; j < length_factors; ++j)
printf("%d\n", factors[j]);

printf("%d\n", n_ff);

return (EXIT_SUCCESS);
}

int main() {
int n_main1; //number from input
int n_main2; //number after if statements
int sq_root_main; //square root of number from function
int prime_flag_main; //value of 1 if it is a prime

n_main1 = input_func();
//printf("main.after.input.function=%d.\n", n_main1);

n_main2 = ifstatements_func(n_main1);
//printf("main.after.ifstatments.function=%d\n", n_main2);

sq_root_main = square_root_func(n_main2);
//printf("main.after.square_root_func_func=%d\n", sq_root_main);

prime_flag_main = prime_func(sq_root_main, n_main2);
//printf("main.after.prime_func=%d\n", prime_flag_main);

factors_func(n_main2);



return (EXIT_SUCCESS);
}


输出:

matthewmpp@annrogers:~/Programming/C.progs/Personal$ vim prime6.c
matthewmpp@annrogers:~/Programming/C.progs/Personal$ cc -c prime6.c
prime6.c: In function ‘pfactorization’:
prime6.c:171: error: subscripted value is neither array nor pointer
prime6.c:178: error: subscripted value is neither array nor pointer


声明;
函数:pfactorization应该用于查找数字的素数分解。
在函数底部:prime_func调用它。
数据正在从prime_func传递到pfactorization。
在添加此功能之前,代码工作正常。

题:
我不明白此错误消息。
这是什么意思,我该如何解决?

解决了:
int z_array [100];
谢谢。

最佳答案

z_array被声明为int类型。 int既不是数组也不是指针:)

我猜您打算将其设置为int*

关于c - C-错误:下标值既不是数组也不是指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4149338/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com