Есть несколько проблем:
5
и '5'
- это не одно и то же.'5'
является символьным значением, тогда как 5
является числовым значением.Значения символов зависят от кодировки символов, наиболее вероятно ASCII в современных системах, где '5'
имеет числовое значение 53
(0x35
). - Стандарт C гарантирует, что цифры символа
'0'
'9'
являются смежными, поэтому вы можете нарисовать символьную цифру, добавив '0'
к случайному числу. - вам следует установить
flag
в 1
перед циклом for
и очистить его толькокогда вы найдете символ. - обратите внимание, что вы рисуете символ из
0
, 1
, 2
, 3
и 4
.Вместо этого вы можете включить все цифры символов?
Вот модифицированная версия:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
char temp[] = { '3', '2', '5', '9', '1' };
const size_t temp_len = sizeof(temp) / sizeof(temp[0]);
char c;
int flag;
srand(time(NULL));
do {
// select a random digit character
c = '0' + rand() % 10;
flag = 1;
for (size_t i = 0; i < temp_len; i++) {
if (temp[i] == c) {
flag = 0;
break;
}
}
} while (flag == 0);
printf("character is: %c\n", c);
return 0;
}
Обратите внимание, что вы можете использовать memchr()
для поиска символа и избегать использования do
/ while
петли, которые могут вызвать путаницу.Вот более простая альтернатива:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
int main() {
char temp[] = { '3', '2', '5', '9', '1' };
char c;
srand(time(NULL));
for (;;) {
// select a random digit character
c = '0' + rand() % 10;
if (!memchr(temp, c, sizeof temp))
break;
}
printf("character is: %c\n", c);
return 0;
}