我對編碼很陌生,需要一些幫助來創建一個陣列,該陣列將使用位元組運算子在 C 中每 30 秒移動到下一個索引。目標是能夠迭代到下一個索引,然后以 3000 秒的間隔回圈回到第一個索引。我有點堅持如何進行,但任何運氣或方向將不勝感激。感謝任何愿意提供幫助的人。
array[3] = {var1|var2, var1|var2, var1|var3};
msleep(3000);
array[i ];
printf("The array is currently this: %d\n", array[i]
uj5u.com熱心網友回復:
如果您的陣列有 3 個元素,您可以增加索引模 3:
#include <unistd.h>
#define ARRAY_SIZE 3
int array[ARRAY_SIZE] = {var1|var2, var1|var2, var1|var3};
unsigned i = 0;
while(true)
{
printf("The array is currently this: %d\n", array[i]);
i = (i 1) % ARRAY_SIZE;
sleep(3);
// when to break is up to you.
}
編輯:解決您的評論
使用if陳述句來重置陣列索引是完全有效的,但是,我在評論中并沒有完全遵循您的邏輯。不要忘記,在 C 中,陣列從索引 0 開始,而不是 1。您不需要使用if陳述句和模除法。使用if陳述句會像
while(true)
{
printf("The array is currently this: %d\n", array[i]);
if (i 1 >= ARRAY_SIZE)
{
i = 0;
}
else
{
i ;
}
sleep(3);
// when to break is up to you.
}
這甚至可能會產生更好的性能,但考慮到 3 秒的睡眠是可以接受的,可能可以忽略不計(您必須對其進行基準測驗才能確定)。
使用模方法時要考慮的另一件事是環繞。unsigned int您系統上的An很可能是 4 個位元組,這意味著它的最大值為 2 32 - 1 或 4294967295。事實證明這可以被 3 整除,因此請考慮當您達到 an 的上限時會發生什么unsigned int:
4294967293 % 3 == 1
4294967294 % 3 == 2
4294967295 % 3 == 0 // <== MAX UNSIGNED INT, 1 wraps it back to 0
0 % 3 == 0
1 % 3 == 1
// etc
這意味著,如果您要環繞,您將連續兩次獲得索引 0。如果這是不可接受的,您肯定要使用“if陳述句”方法。然而,4294967295 / 3 == 1431655765在環繞之前會有迭代,考慮到你的 3 秒睡眠,根據我的數學計算,這將需要超過 136 年的時間。沒有一個計算機系統被認為可以運行那么長時間,因此您可以完全安全地將模數方法用于所有實際目的。
uj5u.com熱心網友回復:
array[3] = {var1|var2, var1|var2, var1|var3};
while (1)
{
array[ i % 3]; /* answer */
printf("The array is currently this: %d\n", array[i]);
msleep(3000);
}
的 必須先于運算式求值之前要執行的變數。
當 該變數之前,它被用作一個“前綴運算子”。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/341528.html
上一篇:呼叫recv時是否需要偏移指標?
