簡體   English   中英

C中帶逗號的多個三元組?

[英]Multiple Ternary in C with comma?

所以我看到了這段代碼

b[2080];
main(j) {
  for (;;) {
    printf("\x1b[H");
    for (j = 1; j < 2080; j++) 
    b[j] = j < 2000 ? (b[j + 79] + b[j + 80] + b[j] + b[j - 1] + b[j + 81]) / 5 : rand() % 4 ? 0 : 512, j < 1840 ? putchar((j % 80) == 79 ? '\n' : " .:*#$H@" [b[j] >> 5]) : 0;
    usleep(20000);
  }
}

所以我試圖重寫它,為什么還要除以 32?
該數組必須聲明為全局,否則它將無法工作。 任何的想法?
還有為什么是512? 這是我到目前為止的嘗試,有什么問題嗎?

for (int j = 1; j < 2080; j++) 
            {
                if (j < 2000) {
                    b[j] = (b[j + 79] + b[j + 80] + b[j] + b[j - 1] + b[j + 81]) / 5;
                }
                else if (rand() % 4 != 0) { // Generate random integers in range 0 to 4
                          b[j] = 0;
                     }
                     else
                     {
                         b[j] = 512;
                     }
                   
                }
            }

這是將三元運算符轉換為if/else語句的功能等效代碼:

            if (j < 2000) {
                b[j] = (b[j + 79] + b[j + 80] + b[j] + b[j - 1] + b[j + 81]) / 5;
            } else if (rand() % 4) {
                b[j] = 0;
            } else {
                b[j] = 512;
            }
            if (j < 1840) {
                if ((j % 80) == 79) {
                    putchar('\n');
                } else {
                    putchar(" .:*#$H@"[b[j] / 32]);
                }
            }

至於右移>> 5做什么的問題,它除以 32 (2 5 ),然后用該除以的值索引數組" .:*#$H@"

編輯:至於為什么數組是全局的,它可能只是在沒有額外代碼的情況下將其初始化為零(整個事情似乎寫得盡可能短,例如,使用隱式int類型和參數中的j )。

請注意,(原始)代碼中存在訪問越界錯誤: b[j + 81]可以在j1999時訪問(因為它是< 2000 ),但是1999 + 81 == 2080b[2080]越界。 您可以用本地int b[2081] = { 0 };替換數組int b[2081] = { 0 }; 但它在修復錯誤的同時稍微改變了輸出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM