Menu

fprintf problem (ofstream)

2011-09-21
2012-09-26
  • Roberto Di Bernardo

    I wrote a program that creates a text file with some letters using ofstream.
    Now I would like to format the text so that the letters are written in groups
    of 5 and the rows are all the same length( i.e. DANIWEBFORUM becomes DANIW
    EBFOR UM). To do this the fprintf function seemed the most appropriate. in the
    following example I use integers, but it is just an example.

    #include <string>
    #include <iomanip>
    #include <fstream>
    #include <cstdio>
    
    using namespace std;
    
    int main()
    {
        ofstream f;
    
        f.open("testo.txt");
    
        for(int i = 0; i < 21; i++)
        {
                f << i;  
                }
    
        f.close(); //to simulate file already created
    
        FILE *file;
        int number;
        file = fopen("testo.txt", "r+");
        if (file==NULL) perror ("Error opening file");
        else
        {
            do {
               number = fgetc (file);
               fprintf(file, "%-5.5i", number);
            } while (number != EOF);
         }
         fclose(file);
         return 0;
    }
    

    can this method work? or there is some function that I can use directly when
    creating the file with ofstream?
    please help

     
  • Jim Pattee

    Jim Pattee - 2011-09-21

    Your method will work. But you cannot format the output the way you want it
    with the fprintf.
    You are reading one character at a time. Print 5 characters then print a
    space.
    To force a line feed print the linefeed character "\n".
    Your format string should be just an "i". What you have now, "%-5.5i", will
    print a single number of 5 digits and 5 decimal places.

     

Log in to post a comment.

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.