2016-04-28 10 views
-2

Ich schrieb o-Programm, die in inf while-Schleife arbeiten müssen. In der Schleife muss das Programm einige Daten in Datei speichern und diese Datei schließen. In der Schleife gibt es eine Schlaffunktion, die für 10 Sekunden Schlaf programmiert. Dann möchte ich überprüfen, was in der Datei ist, aber es ist leer. Wenn das Programm ohne Schleife alles läuft OK istC-Programm speichert nicht in Datei in While-Schleife

Der vollständige Code ist ziemlich riesig und so füge ich eine kurze Version

main() 
{ 
    FILE* fp; 
    while(1) 
    { 
     fp=fopen(SAVE_FILE, "awt"); 
     if(fp==NULL) 
     { 
      printf("Error while opening the save file \n"); 
     } 
     fprintf(fp, "%s",'this is saved text'); 
     fclose(fp); 
     sleep(10); 
    } 
} 

eine Idee hat, wie Sie diese Datei korrekt schließen zu können Daten während Schlaf functiion lesen ?

(Dies ist auf Linux läuft)

+2

'a' und' w' Modi schließen sich gegenseitig aus. Können Sie 'w' entfernen und erneut prüfen? – wRAR

+2

Nicht direkt mit Ihrer Frage verwandt, aber 'printf (" Fehler beim Öffnen der Sicherungsdatei \ n ");' sollte gefolgt werden von 'continue;'. Andernfalls werden Sie mit einem 'fprintf (fp, .. .) 'where' fp' ist 'NULL'. –

+0

wRAR es hilft nicht – kmbm

Antwort

1

muss Ihr Code

int main() 
{ 
    FILE* fp; 
    while(1) 
    { 
     fp=fopen(SAVE_FILE, "at"); 
     if(fp==NULL) 
     { 
      printf("Error while opening the save file \n"); 
     } 
     else 
     { 
      fprintf(fp, "%s\n","this is saved text"); 
      fclose(fp); 
     } 
     sleep(10); 
    } 
} 

Sie schrieben, die Zeichenfolge zwischen ' gespeichert werden. Sie müssen " für Zeichenfolgenliterale verwenden.

Darüber hinaus können Sie Datei nur mit einer Option öffnen.

Sie sollten immer -Wall Option beim Kompilieren verwenden. gcc zeigt Ihnen eine Warnung für Ihren Code.

test.c:662:9: warning: format ‘%s’ expects argument of type ‘char *’, but argument 3 has type ‘int’ [-Wformat=] 
     fprintf(fp, "%s",'this is saved text'); 
+2

Vielleicht möchten Sie bearbeiten, um ein 'continue;' in der if-Anweisung auch enthalten, weil ein Fehler beim Öffnen der Datei einige interessante Probleme verursachen wird. –

+0

@LukePark und auch ändern ' fclose' zu ​​'fsync'. –

+0

Die "else" -Klausel ist viel besser als die 'continue'-Idee. Wenn Sie das 'continue' entfernen, läuft das Programm nicht amok, wenn' fopen' fehlschlägt. –