Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    23

    [C++] fprintf con ofstream

    ho creato un file di testo tramite uno stream ofstream con una serie di caratteri scritti uno dietro l'altro senza spazi. vorrei invece che le lettere vengano scritte a gruppi di 5 (es: PROVA PROVA PROVA PROVA .....) separati da spazi e che le righe siano tutte della stessa grandezza e giustificate. volevo utilizzare la funzione fprintf per fare tutto questo: ma visto che la funzione accetta un puntatore a file, ho pensato di aprire nuovamente il file creato in precedenza questa volta però come
    codice:
    FILE *file;
       
    file = fopen("testo.txt", "r+");
    in modo da poter utilizzare fprintf. per fare un esempio chiarificatore usando gli interi, tipo qualcosa del genere
    codice:
    #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();
        
        FILE *file;
        int number;
        
        file = fopen("testo.txt", "r+"); //apro di nuovo il file creato prima
        if (file==NULL) perror ("Error opening file");
        else
        {
            do {
               number = fgetc (file);
               fprintf(file, "%-5.5i", number); //formattazione
            } while (number != EOF);
         }
         fclose(file);
         return 0;
    }
    secondo voi va bene questo metodo o posso fare in qualche altro modo, magari più efficiente?

  2. #2
    Ma non fai prima ad usare i manipolatori di formattazione di iostream? Esattamente come li vuoi scritti questi numeri? Con padding a 5 caratteri e separati da uno spazio? Ti basta fare:
    codice:
    #include <iomanip>
    #include <fstream>
    
    using namespace std;
    
    int main()
    {
        ofstream f;
        f.open("testo.txt");
        for(int i = 0; i < 21; i++)
            f << setw(5)<<i<" ";  
        f.close();
        return 0;
    }
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.