2016-12-14 2 views
-1

В этой программе я должен сгенерировать случайное число, а затем, если число 1 я должен хранить зеленый в переменном цвете, и если это 0 я должен хранить красным, а затем распечатать результатстрока не печатает

#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

распечатке string в пятый символ массива (который не является частью массива ...). (Будьте осторожны с этими носовыми демонами.) Также ваш массив будет малым для строки. –

+1

Вам нужно скомпилировать с включенными предупреждениями ('-Wall' для gcc/clang), а затем исправить все предупреждения. – user3386109

+0

@KamiKaze, как я должен это делать тогда? –

ответ

4
colour[5]="green"; 

и

приводят к undefined behaviour по нескольким причинам (Вы обращаетесь к массиву colour вне границ и пытаетесь присвоить строку литерала гольца).

Вам не нужен массив. Просто используйте указатель:

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 вместо% с при печати ..

+0

, что создаст еще одну проблему, поскольку вы пишете больше символов, чем в массиве есть слоты. –

+0

Да, размер массива необходимо увеличить в случае зеленого цвета, верно? – shafeeq

+1

Я бы посоветовал вам написать это в ответ, чтобы сделать его правильным. –

Смежные вопросы