scanf
関数を使用して、ユーザーの入力上のさまざまな数値の未知の量を読み取る必要があります。これは、単純に、さまざまな整数の数が、可能な限り多くの数値を送信することによってユーザーによって決定されることを意味します。コードを次のように述べたように、私は、(私が持っている)に直接数字を読むことに注意してください:問題:C不明なサイズの整数配列の宣言
int main(void)
{
int numbers[];
int error = 0;
int i = 0;
while(scanf("%i", &numbers[i++]) == 1);
for(int i = 0; i < sizeof(numbers) - 1; ++i) {
if(numbers[i] < -10000 || numbers[i] > 10000)
{
printf("%i%s", numbers[i], ", ");
}
else
{
printf("%s", "\b\b\nError: Error: Vstup je mimo interval!\n");
// Means "Input is out of range!".
// We have to write exact output to terminal as stated in HW.
i = sizeof(numbers);
error = 1;
}
}
...
}
int error
は実際にはブール値ですが、私はブールライブラリを実装するために怠惰だので、私は整数としてそれを定義します。 D
しかし、問題は他のところです。コンパイラが私にエラーを投げます:
Cプログラムは配列の割り当て可能なサイズを知る必要があります。しかし、それはして問題を解決していません
C - Declaring an array with an undefined value
:私はすでに他の人が、配列のサイズの問題を探している間、私が実装する必要があると基本を見つけるためにそこに共有している、私はこの質問を見つけたいくつかのコードに見えました未知の量の数を直接入力するための未知の配列サイズ。私は解決する必要があるところがどこにもないことを発見しました。 、数字の統計のために使用されるすべてのforループと同じ
main.c:50:23: error: iteration 999u invokes undefined behavior [-Werror=aggressive-loop-optimizations]
if(numbers[j] > 0)
^
main.c:48:9: note: containing loop
for(int j = 0; j < sizeof(numbers); ++j)
^
(合計、最大値、最小値、オッズは、追いついた:私は、999の番号まで保持するために、配列の最大サイズを定義しようとしたが、その後、コンパイラは私にこの例外をスローしますポジティブ、ネガティブ、パーセンテージおよび平均)。つまり、配列のサイズは厳密に999で、残りの数字は0になります。私はmalloc
機能を見つけたが、その使用法を理解していない:(
mallocの場合:配列を 'int * arr'として宣言してから、使用する前に' arr =(int *)malloc(n * sizeof(int)); '、ここでnは必要なサイズで、関数の最後に' free(arr); 'を呼び出す必要があります。 –
実際の問題について:サイズ999の配列には0から998までのインデックスが有効です。 –
さらに、 'typedef enum {false、true} bool;'はブール値を実装するのに十分な*です。 –