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

mat*_*mpp 2 c

/*\n * File:   main.c\n * Author: matthewmpp\n *\n * Created on November 7, 2010, 2:16 PM\n */\n\n#include <stdio.h>\n#include <string.h>\n#include <stdlib.h>\n#include <math.h>\n\n/*\nprime numbers.\nversion4\nshould tell whether a number is prime or not prime.\nby using other prime numbers.\n */\n\nint input_func() {\n    char line[100];\n    int n_input;\n\n    while (1) {\n        printf("Please enter a whole number.\\n");\n        fgets(line, sizeof (line), stdin);\n        sscanf(line, "%d", &n_input);\n\n        if (n_input >= 0)\n            break;\n\n        return (n_input);\n    }\n}\n\nint ifstatements_func(n_ifstate)\nint n_ifstate;\n{\n    if (n_ifstate == 0) {\n        printf("The number, %d, is not prime and has no factors.\\n", n_ifstate);\n        exit(1);\n    }\n\n    if (n_ifstate == 1) {\n        printf("The number, %d, is not prime.\\n", n_ifstate);\n        printf("The factors of %d, is %d.\\n", n_ifstate, n_ifstate);\n        exit(1);\n    }\n\n    if (n_ifstate == 2) {\n        printf("The number, %d, is a prime.\\n", n_ifstate);\n        printf("The factors of %d, are 1 and %d.\\n", n_ifstate, n_ifstate);\n        exit(1);\n    }\n    if (n_ifstate == 3) {\n        printf("The number, %d, is a prime.\\n", n_ifstate);\n        printf("The factors of %d, are 1 and %d.\\n", n_ifstate, n_ifstate);\n        exit(1);\n    }\n    return (n_ifstate);\n}\n\nint square_root_func(n_prmfnc)\nint n_prmfnc;\n{\n    int i; //counter\n\n    float sq_root_f;\n    int sq_root_i;\n\n    int primes[100];\n    int length_primes;\n\n    primes[0] = 2; /*first prime is 2.*/\n    primes[1] = 3; /*second prime is 3.*/\n    length_primes = sizeof (primes);\n\n    //printf ("before.sq_root.value of n_prmfnc=%d\\n", n_prmfnc);\n    sq_root_f = sqrt(n_prmfnc);\n    sq_root_i = sq_root_f;\n    //printf ("prmfnc.after.sq_root\\n");\n    //printf ("value of sq_root=%.3f\\n", sq_root_f);\n    //printf ("value of sq_root=%d\\n", sq_root_i);\n\n    return (sq_root_i);\n}\n\nint prime_func(sq_root_pf, n_pf)\nint sq_root_pf;\nint n_pf;\n{\n    //printf ("in.pf.beginning.of.func.sq_root_pf=%d\\n", sq_root_pf);\n    //printf ("in.pf.beginning.of.func.n_pf=%d\\n", n_pf);\n\n    int factor_counter = 0;\n    int factor_temp;\n    int prime_counter = 0;\n    int prime_flag = 0;\n\n    int primes_pf[100];\n    int length_primes_pf = 0; //counter\n    int i; //counter\n\n    primes_pf[0] = 2;\n    primes_pf[1] = 3;\n    primes_pf[2] = 5;\n\n    length_primes_pf = 3;\n    //printf("length_primes_pf=%d\\n", length_primes_pf);\n\n    //printf ("before.for.in.pf\\n");\n    for (i = 0; i <= length_primes_pf; ++i) {\n        //printf ("after.for.in.pf\\n");\n        if (primes_pf[i] == 0)\n            printf("primes_pf=0");\n        else {\n            if (primes_pf[i] <= sq_root_pf) {\n                //printf("primes_pf.i=%d, sq_root_pf=%d\\n", primes_pf[i], sq_root_pf);\n                //printf("before.modulus.in.pf\\n");\n                factor_temp = n_pf % primes_pf[i];\n                //printf("after.modulus.in.pf\\n");\n                //printf("value.of.factor_temp=%d\\n", factor_temp);\n                if (factor_temp == 0) {\n                    ++factor_counter;\n                    //printf("value.factor_counter=%d\\n", factor_counter);\n                } else\n                    ++prime_counter;\n\n                if (factor_counter == 0 && prime_counter > 0) {\n                    prime_flag = 1; /*yes, number is prime.*/\n                    primes_pf[length_primes_pf + 1] = n_pf;\n                    //printf("length_primes_pf=%d\\n", length_primes_pf);\n                }\n            }\n\n        }\n    }\n\n    if (prime_flag == 1) {\n        printf("The number, %d, is prime.\\n", n_pf);\n        printf("The factors of %d, is 1 and %d.\\n", n_pf, n_pf);\n        exit(0);\n    } else\n        printf("The number, %d, is not prime.\\n", n_pf);\n\n    if (prime_flag == 0)\n    pfactorization (primes_pf, length_primes_pf, n_pf);\n\n    return (prime_flag);\n}\n\nint pfactorization(primes_fac, length_primes_fac, n_fac)\nint primes_fac[];\nint length_primes_fac;\nint n_fac;\n{\n    int i;\n    int j;\n\n    int result;\n    int n_temp;\n\n    int z_array;\n    int length_z_array=0;\n\n    for (i=0; i<=length_primes_fac; ++i) {\n        result = n_fac%primes_fac[i];\n        if (result == 0) {\n            n_temp = n_fac/primes_fac[i];\n            z_array[length_z_array]=primes_fac[i];\n            ++length_z_array;\n        }\n    }\n\n    printf ("The prime factorization is:");\n    for (j = 0; j < length_z_array; ++j)\n        printf("%d\\n", z_array[j]);\n}\n\nint factors_func(n_ff)\nint n_ff;\n{\n    int i;\n    int j;\n\n    int result;\n\n    int factors[100];\n    int length_factors = 0;\n\n    for (i = 2; i < n_ff; ++i) {\n        result = n_ff % i;\n        if (result == 0) {\n            factors[length_factors] = i;\n            ++length_factors;\n        }\n    }\n\n    printf("The factors for %d are:\\n", n_ff);\n    printf("1\\n");\n\n    for (j = 0; j < length_factors; ++j)\n        printf("%d\\n", factors[j]);\n\n    printf("%d\\n", n_ff);\n\n    return (EXIT_SUCCESS);\n}\n\nint main() {\n    int n_main1; //number from input\n    int n_main2; //number after if statements\n    int sq_root_main; //square root of number from function\n    int prime_flag_main; //value of 1 if it is a prime\n\n    n_main1 = input_func();\n    //printf("main.after.input.function=%d.\\n", n_main1);\n\n    n_main2 = ifstatements_func(n_main1);\n    //printf("main.after.ifstatments.function=%d\\n", n_main2);\n\n    sq_root_main = square_root_func(n_main2);\n    //printf("main.after.square_root_func_func=%d\\n", sq_root_main);\n\n    prime_flag_main = prime_func(sq_root_main, n_main2);\n    //printf("main.after.prime_func=%d\\n", prime_flag_main);\n\n    factors_func(n_main2);\n\n\n\n    return (EXIT_SUCCESS);\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

输出:

\n\n
matthewmpp@annrogers:~/Programming/C.progs/Personal$ vim prime6.c\nmatthewmpp@annrogers:~/Programming/C.progs/Personal$ cc -c prime6.c\nprime6.c: In function \xe2\x80\x98pfactorization\xe2\x80\x99:\nprime6.c:171: error: subscripted value is neither array nor pointer\nprime6.c:178: error: subscripted value is neither array nor pointer\n
Run Code Online (Sandbox Code Playgroud)\n\n

语句;\n函数:pfactorization 应该找到数字的素因数分解。\n它在函数 prime_func 的底部调用。\n数据正在从 prime_func 传递到 pfactorization。\n在我添加此函数之前,代码工作正常。

\n\n

问题:\n我不明白此错误消息。\n它是什么意思以及我应该如何解决它?

\n\n

已解决:\nint z_array[100];\n谢谢。

\n

Cam*_*ner 5

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

我猜你是想把它变成int*.