2009-09-09 6 views
0

J'utilise un code C de base pour imprimer un fichier texte:Ajout de plusieurs lignes à une sortie de fichier texte?

FILE *file; 
file = fopen("zach.txt", "a+"); //add text to file if exists, create file if file does not exist 

fprintf(file, "%s", "This is just an example :)\n"); //writes to file 
fclose(file); //close file after writing 

printf("File has been written. Please review. \n"); 

Ma question concerne le code ci-dessus: j'ai plusieurs lignes, j'ai imprimé que je voudrais être enregistrées dans le document texte. Comment puis-je facilement inclure plusieurs lignes de code à imprimer dans mon fichier en utilisant le code ci-dessus?

+0

Je suppose que ma question principale est de savoir si je peux envelopper mes lignes multiples dans une fonction ou quelque chose ou varilable, et simplement appeler cette variable pour imprimer les lignes multiples de code? – HollerTrain

+0

Sentiment de devoirs ... picotements –

+0

@John, lol oui c'est devoirs :) Cependant j'essaie d'apprendre ceci au lieu de simplement trouver la réponse facile et puis s'enfuir :) J'apprécie l'aide de n'importe qui avec ceci;) – HollerTrain

Répondre

2

Déplacer l'écriture de fichier dans une procédure:

void write_lines (FILE *fp) { 
    fprintf (file, "%s\n", "Line 1"); 
    fprintf (file, "%s %d\n", "Line", 2); 
    fprintf (file, "Multiple\nlines\n%s", "in one call\n"); 
} 

int main() { 
    FILE *file = fopen ("zach.txt", "a+"); 
    assert (file != NULL); // Basic error checking 
    write_lines (file); 
    fclose (file); 
    printf ("File has been written. Please review. \n"); 
    return 0; 
} 
+0

Pourquoi ne pas utiliser 'fputs()' et d'éviter les dangers et les frais généraux de la chaîne de format? C'est ce que tu fais pratiquement de toute façon. –

+0

Vous pouvez également éviter d'appeler fprintf ou fputs à plusieurs reprises. #define my_string "ligne1 \ nline2 \ nline3" fputs (chaîne_message, fichier); – KFro

+0

@KFro - Notez que 'fputs()' ne rajoutera pas de nouvelle ligne, contrairement à 'puts()' (standard standards mutch?). Cependant, je préfère le diviser en plusieurs appels de fonction différents, ou bien utiliser la concaténation automatique de littéraux de chaîne pour mettre des lignes de la chaîne sur leurs propres lignes. Je n'ai pas besoin de cacher ça avec une macro. –

1

Il y a beaucoup de façons de le faire, voici une:

#include<stdio.h> 
#include<string.h> 

int appendToFile(char *text, char *fileName) { 

    FILE *file; 

    //no need to continue if the file can't be opened. 
    if(! (file = fopen(fileName, "a+"))) return 0; 

    fprintf(file, "%s", text); 
    fclose(file); 

    //returning 1 rather than 0 makes the if statement in 
    //main make more sense. 
    return 1; 

} 

int main() { 

    char someText[256]; 

    //could use snprintf for formatted output, but we don't 
    //really need that here. Note that strncpy is used first 
    //and strncat used for the rest of the lines. This part 
    //could just be one big string constant or it could be 
    //abstracted to yet another function if you wanted. 
    strncpy(someText, "Here is some text!\n", 256); 
    strncat(someText, "It is on multiple lines.\n", 256); 
    strncat(someText, "Hooray!\n", 256); 

    if(appendToFile(someText, "zach.txt")) { 
     printf("Text file ./zach.txt has been written to."); 
    } else { 
     printf("Could not write to ./zach.txt."); 
    } 

    return 0; 

} 

Avis les strncpy et strncat fonctions puisque vous n'êtes pas vraiment utiliser l'entrée formatée fournie avec les fonctions xprintf.

Questions connexes