2010-11-21 3 views
1

Я пытаюсь написать программу для целей тестирования, которая генерирует последовательность псевдослучайных символов ASCII для печати, где вы помещаете в командной строке сколько символов вы хотите. сейчас он работает не так хорошо; последовательность почти всегда является большинством? s, и она не всегда печатает количество символов, которые я скажу для печати. вот мой код; что с этим не так? Я использую время как семя для случайной функции.генерирование случайных печатных символов ascii в c

примечание: мне не стоит использовать какой-либо алгоритм более сложный, чем один, используя srand() и rand().

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

int main(int argc, char *argv[]) { 
    int c; 
    int i; 
    int limit; 

    sscanf(argv[1], "%d", &limit); 
    srand((unsigned int)time(NULL)); 

    for (i = 0; i < limit; i++) { 
     c = rand(); 
     if (c != 9 && c != 10 && c <= 32 && c >= 127) { 
     i--; 
     } 
     else { 
     putchar(c); 
     } 
    } 
    return 0; 
} 

спасибо!

+0

хотя этот ответ в C#, она должна быть относительно легко конвертировать в C: http://stackoverflow.com/questions/4221001/algorithm-for-generating-a-random-numeric-string-10-000-chars-in-length/42210 15 # 4221015 –

+2

Почему вы решили, что 9 и 10 подпадают под «печать»? –

+0

Возможно, он имел в виду '' \ n'' – ruslik

ответ

1

Попробуйте устранить эту строку:

if (c != 9 && c != 10 && c <= 32 && c >= 127) { 

должно быть:

if (c != 9 && c != 10 && (c < 32 || c >= 127)) { 

Но это, вероятно, будет лучше:

if (!isprint(c)) { 
+0

Действительно, rand() дает значения в гораздо более широком диапазоне, чем 0..255 типичное поведение этого изменения ничего не будет печатать. – horsh

+0

@horsh можно решить, взяв 'c = rand() & 0x7F' – ruslik

+0

@horsh код, написанный в вопросе, продолжает выбирать случайные числа, пока не найдет что-то для печати, поэтому он ничего не будет печатать, много времени выкидывает ценности, которые ему не нравятся между печатными материалами. –

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