2016-12-14 32 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

我建议你在答案中写下这一点,以使其正确。 –