C - Schreibe die Ausgabe in eine Datei
EDIT:
void print(const int *v, const int size) {
FILE *fpIn;
fpIn = fopen("char-array.txt", "a");
int i;
if (v != 0) {
for (i = 0; i < size; i++) {
printf("%d", (int)v[i]);
fprintf(fpIn, "%d\n", (int)v[i]);
}
perm_count++;
printf("\n");
}
fclose(fpIn);
}
Ich denke, das ist eine relativ einfache Frage 🙂
Grundsätzlich ist das Programm eine permutation Algorithmus, und drucken Sie die Ausgabe auf der standard-Ausgabe in der Konsole. Ich will auch zu schreiben, den Inhalt einer Datei via fprintf, nehme ich an. Obwohl ich kann nicht scheinen, um es arbeiten. Nur es druckt sinnlose Zeichen in die erste Zeile der text-Datei und mehr nicht !
Ich werde fügen Sie den folgenden code, und Hilfe ist sehr willkommen ! Das schreiben, um den Datei-code befindet sich innerhalb der print-Funktion.
Dank,
T.
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <time.h>
#include <time.h>
clock_t startm, stopm;
#define START if ( (startm = clock()) == -1) {printf("Error calling clock");exit(1);}
#define STOP if ( (stopm = clock()) == -1) {printf("Error calling clock");exit(1);}
#define PRINTTIME printf("%2.3f seconds used by the processor.", ((double)stopm- startm)/CLOCKS_PER_SEC);
int perm_count = 0;
void print(const int *v, const int size) {
FILE *fpIn;
fpIn = fopen("char-array.txt", "wb");
int i;
if (v != 0) {
for (i = 0; i < size; i++) {
printf("%d", (char)v[i]);
fprintf(fpIn, "%d", v[i]);
fprintf(fpIn, "\n");
}
perm_count++;
printf("\n");
}
}
void permute(int *v, const int start, const int n) {
int i;
if (start == n-1) {
print(v, n);
}
else {
for (i = start; i < n; i++) {
int tmp = v[i];
v[i] = v[start];
v[start] = tmp;
permute(v, start+1, n);
v[start] = v[i];
v[i] = tmp;
}
}
}
int main() {
int i, x;
printf("Please enter the number of terms: ");
scanf("%d", &x);
int arr[x];
printf("Please enter the terms: ");
for(i = 0; i < x; i++)
scanf("%d", &arr[i]);
START
permute(arr, 0, sizeof(arr)/sizeof(int));
STOP
printf("Permutation Count: %d\n", perm_count);
PRINTTIME
return 0;
}
- Ich würde gerne vorschlagen, weniger Abhängigkeit von Makros für Aufgaben, die leicht gehandhabt werden können über Funktionen statt.
- +1 @sarnold. Ihre zukünftige Debuggen selbst wird es Ihnen danken.
Du musst angemeldet sein, um einen Kommentar abzugeben.
1. Falsche Zugriffsmodi in fopen nennen
Öffnen Sie Ihre Datei als binäre Datei:
fopen("char-array.txt", "wb");
. Nicht setzenb
dieser string mit Zugriffsmodi, wenn Sie gehen, um zu schreiben-formatierte Zeichenfolgen gibt. Und da wollen Sie wahrscheinlich zum Anhängen neuer Daten am Ende der Datei statt overwritting verwenden Siea
stattw
:2. Schreiben auf den Ausgabe-Puffer nicht direkt in die Datei
Wenn Sie Funktionen verwenden, wie fprintf, Sie schreiben nicht direkt auf die Datei sondern die Ausgabe-Puffer. Verwenden Sie fflush zum schreiben von Daten aus dem Puffer für die Ausgabe in die Datei, oder Sie können einfach schließen Sie die Datei über fclose Funktion, die spült diesen Puffer automatisch.
Fügen Sie einfach diese Zeile:
Ende
print
Funktion.3. Falsche Formatierung der Ausgabe
Sie sollten nicht gegossen
int
zuchar
. Es schneidet Ihre zahlen. Und Sie haben auchfprintf(fpIn, "\n");
im falschen Bereich, denke ich. Es könnte wie folgt Aussehen:you don't write directly to the file but to the output buffer
und wie dies zu tun? Danke!fprintf
nennen. Was Sie schreiben, um die Datei tatsächlich geschrieben, sobald der Puffer geleert wird (zum Beispiel, wenn die Datei geschlossen ist, durch den Aufruffclose
).Vergeuden Sie nicht Ihre Zeit damit, die Programmierung, die Sie nicht haben, um die Verwendung von
fprintf
ist schön, aber da alles, was Sie tun möchten, ist drucken die Ausgabe, Sie können einfach drucken Sie die Dinge in die Datei direkt mit der UNIX-built-in-Befehle. Sagen Sie Ihr Programm genannt wirdwirteoutput
dann alles, was Sie tun müssen, ist, übergeben Sie den folgenden Befehl beim Aufruf von der shell auswriteoutput > file.txt
. Alles, was Sie verwenden würde, wäre dieprintf
Funktion.Wenn Sie neugierig sind, dies ist eine alte Funktion, und Sie können eine ausführliche Beschreibung finden Sie in der original-Papier Das UNIX-Betriebssystem. Sehen Sie sich den Abschnitt genannten Standard-I/O.
Sie nicht gegossen, um eine
char
(aus einemint
) beim schreiben in die Datei ein, wie Sie mit dem screen-display. Werden im folgenden die gleichen zahlen in die Datei, wie Sie sehen auf dem Bildschirm: