2016-06-03 12 views
1

Also habe ich ein Projekt erstellt, das Zahlen aus einer Textdatei liest und eine isometrische Projektion davon zeichnet, aber jetzt versuche ich ein Programm zu erstellen, das Zahlen generiert von 0-9 und schreibt sie in das Dokument. So sieht mein Code aus, aber das Dokument bleibt leer. Ich gehe davon aus, dass der Fehler entweder in meiner rand() -Funktion Verwendung ist, oder wenn ich die ganzen Zahlen in Zeichen umwandeln.Zufallszahlen in C erzeugen und in eine Textdatei schreiben

Vielen Dank im Voraus für alle Eingaben, und ich entschuldige mich, wenn es nur ein Bedienungsfehler ist. Ich bin ziemlich neu in diesem Zeug:

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

int  main(void) 
{ 
    char str[10]; 
    FILE *fptr; 
    int  i; 
    int  num; 
    char num2; 
    i = 0; 

    fptr = fopen("map.fdf", "w"); 
    if (fptr == NULL) 
    { 
     printf("ERROR Creating File!"); 
     exit(1); 
    } 
    while (str[i] != '\0') 
    { 
     num = rand() % 10; 
     num2 = num + '0'; 
     str[i] = num2; 
     i += 1; 
    } 
    puts(str); 
    fprintf(fptr,"%s", str); 
    fclose(fptr); 
    return (0); 
} 

Antwort

3

Ich verstehe nicht Ihre while Schleife, scheint es auf eine Bedingung zu warten, dass es keinen Code zu passieren enthält.

Wie auch immer, wie wäre es nicht neu zu erfinden, wie man einstellige Ganzzahlen in Zeichen umwandelt und stattdessen höhere I/O-Funktionen verwendet, um einfach in die Datei zu drucken? Deshalb sind sie auch da. :)

for (int i = 0; i < 10; ++i) 
{ 
    fprintf(fptr, "%d", rand() % 10); 
} 
fprintf(fptr, "\n"); /* Probably nice to make it a line. */ 

Wenn Sie wirklich ohne for tun machen müssen, können Sie natürlich immer manuell umwandeln in eine while Schleife:

int i = 0; 
while(i++ < 10) 
{ 
    fprintf(fptr, "%d", rand() % 10); 
} 
+0

Danke für die Antwort. Die while-Schleife soll wiederholen, bis sie das '\ 0'-Zeichen trifft, das das Ende der Zeichenkette sein sollte, aber wie Hans erwähnt, scheint es, dass/0 beim ersten Zeichen in der Zeichenkette initialisiert wird. int i wird als Index für das aktuelle Zeichen in der Zeichenfolge verwendet. Der Grund, warum ich Low-Level-Programmierung verwende, liegt darin, dass 90% der vorgefertigten Funktionen in unserem Lehrplan verboten sind, einschließlich for-Schleifen. Nochmals vielen Dank für die Antwort, und ich werde Sie wissen lassen, ob es funktioniert! –

+0

Danke noch einmal, ich habe es geschafft, es funktioniert mit einer while-Schleife! –

2

Ihre „str“ nicht initialisiert ist, aber anscheinend hat eine ‚\ 0‘, da es das erste Element ist, so dass die while-Schleife wird nicht ausgeführt.