2010-11-21 11 views
1

Ich versuche, ein Programm zu Testzwecken zu schreiben, die eine Folge von pseudozufälligen druckbaren ASCII-Zeichen generiert, wo Sie in die Befehlszeile eingeben, wie viele Zeichen Sie möchten. Im Moment funktioniert es nicht so gut. Die Reihenfolge ist fast immer die Mehrheit, und es druckt nicht immer die Anzahl der Zeichen, die ich sage, es zu drucken. Hier ist mein Code; Was stimmt damit nicht? Ich benutze die Zeit als einen Samen für die zufällige Funktion.zufällige druckbare ASCII-Zeichen in c

hinweis: es ist es mir nicht wert, einen komplizierteren algorithmus als einen zu verwenden, der srand() und rand() verwendet.

#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; 
} 

danke!

+0

obwohl diese Antwort in C# ist, sollte es relativ sein einfach in C umzuwandeln: http://stackoverflow.com/questions/4221001/algorithm-for-generating-a-random-numeric-string-10-000-chars-in-length/42210 15 # 4221015 –

+2

Warum haben Sie entschieden, dass 9 und 10 unter "druckbar" fallen? –

+0

Wahrscheinlich meinte er '' \ n'' – ruslik

Antwort

1

Versuchen zur Festsetzung dieser Linie:

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

sein sollte:

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

Aber das wäre wahrscheinlich besser:

if (!isprint(c)) { 
+0

Wirklich, rand() gibt Werte in viel breiterem Bereich als 0..255 das typische Verhalten dieser Änderung wird nichts drucken. – horsh

+0

@horsh kann gelöst werden, indem man 'c = rand() & 0x7F' – ruslik

+0

@horsh der Code, wie in der Frage geschrieben, wählt Zufallszahlen, bis es etwas zu drucken findet, so wird es nichts drucken, obwohl es verschwenden wird eine Menge Zeit, Werte rauszuwerfen, die es zwischen den Drucksachen nicht mag. –