2016-12-14 65 views
-1

在這個程序中我必須生成一個隨機數,然後,如果數目爲1我必須存儲綠色變色,如果它是0 I具有存儲紅色,然後打印出結果串不打印

#include<stdio.h> 
#include<time.h> 
int main() 
{ 
    int rn; 
    rn=Switch(); 
    Display(rn); 
    return 0; 
} 
int Switch() 
{ 
    int rn; 
    srand(time(NULL)); 
    rn=rand()%2; 
    return rn; 
} 
int Display(int rn) 
{ 
    char colour[5]; 
    if (rn==1) 
    { 
     colour[5]="green"; 
    } 
    else 
    { 
     colour[5]="red"; 
    } 
    printf("Random number : %d\nColour : %c",rn,colour); 
} 

但是,當我運行該程序時,它會打印隨機數並且不會打印顏色。

+0

您打印字符串轉換爲數組的第五個字符(它不是數組的一部分...)。 (小心那些鼻子惡魔。)你的陣列也會變小。 –

+1

您需要編譯時啓用警告('-Wall' for gcc/clang),然後修復所有警告。 – user3386109

+0

@KamiKaze我應該怎麼做呢? –

回答

4
colour[5]="green"; 

導致undefined behaviour出於多種原因(你正在訪問該陣列colour範圍之外,並試圖分配一個字符串爲char)。你不需要數組。只需使用一個指針:

char *colour; 
if (rn == 1) { 
    colour="green"; 
} else { 
    colour="red"; 
} 
printf("Random number : %d\nColour : %s", rn, colour); 
0

更改數組聲明爲char colour[32] = {0};

使用strcpy(colour, "green");代替colour[5]="green";同樣爲紅色

使用%S代替%C,而印刷..

+0

這會在您寫入更多字符時創建另一個問題,而不是數組中的插槽。 –

+0

是的,在綠色的情況下需要增加數組的大小,對吧? – shafeeq

+1

我建議你在答案中寫下這一點,以使其正確。 –