長い数字を取得し、何桁の数字を数えてから、その数字の2桁目の最後の数字を2倍してから、各数字の掛け算を繰り返すそれを配列に追加します。もしあなたが私が何を話しているのか知っていれば、それはcs50から設定されたクレジットカードの問題です。C - 返された配列が機能しない
私はそれが戻ってこのエラーをスロープログラムを作成する場合:
error: format specifies type 'long' but the argument has type '<dependent type>' [-Werror,-Wformat]
credit.c:22:21: error: use of undeclared identifier 'array'
printf("%ld\n", array);
^
credit.c:40:8: error: incompatible pointer to integer conversion returning 'long [nDigits]' from a function with result type 'long' [-Werror,-Wint-conversion]
return array;
^~~~~
3 errors generated.
make: *** [credit] Error 1
コード:
#include <cs50.h>
#include <stdio.h>
#include <math.h>
long find_2ndlast_nums(long x);
int main(void)
{
long n;
long nDigits;
do
{
n = get_long_long("Please enter your credit card number:\n");
nDigits = floor(log10(labs(n))) + 1;
}
while (nDigits < 13 || nDigits > 16);
find_2ndlast_nums(n);
printf("%ld\n", array);
}
long find_2ndlast_nums(long x)
{
long nDigits = floor(log10(labs(x))) + 1;
long array[nDigits];
for (int y = 1; y < nDigits; y += 2)
{
x = (fmod((floor(x/10^y)), 10)) * 2;
array[nDigits - y] = x;
}
return array;
}
これは何度も要求されていますが、関数から配列を返すことはできません。あなたは 'malloc()'を使うか、配列を関数に渡してパラメータとして渡す必要があります。 –
あなたの関数は 'long'を返すと宣言され、' long [nDigits] 'を返そうとします。メモリの問題はさておき、なぜこれはうまくいくと思いましたか? – ApproachingDarknessFish
'long find_2ndlast_nums(long x)'では、最初の 'long'が何を意味するのか理解していますか? –