Zapisuj w pliku bez entera

0

Siema, napisałem część programu, tą częścią programu jest utworzenie "kwadratu" 10x10 w pliku tekstowym, który składa się z losowo wybranych znaków @, #,*, program wykonuje to dobrze, niestety gdy sprawdzam ile jest znaków w pliku za pomocą tellp(); to pokazuje mi pozycję 120 , wczytuje też enter, jak można to zmodyfikować, aby w pliku utworzył się taki sam kwadrat 10x10, ale żeby nie zapisywały się entery , aby po ponownym wywołaniu " znaki.seekp(0,znaki.end);
cout<<" "<<znaki.tellp();" wyświetliła się pozycja 100, jest mi to potrzebne do drugiej części zadania, dziękuję

#include <iostream>
#include <cstdlib>
#include <time.h>
#include<fstream>
#include<math.h>
#include<sstream>

using namespace std;

int main()
{  srand(time (0));
   string gol;
   int k,i,jest;
   string slowo,znaczek;
   fstream  znaki;
   znaki.open("ala.txt",ios::in|ios::out|ios::trunc);
   for(i=0;i<10;i++)
   {
       for(k=0;k<10;k++)
       {
           jest =(rand()%3) +1;
           cout<<jest;
           switch(jest)
           {
               case 1 : znaczek="#";
               break;
               case 2 : znaczek="@";
               break;
               case 3 : znaczek="*";
               break;

           }
         znaki<<znaczek;

       }
     znaki<<endl;

   }
   znaki.seekp(0,znaki.end);
  cout<<" "<<znaki.tellp();
}
przykładowy zapis w pliku
*@#*##**@#
**##@*@@@#
*#*@@#@##*
#**@@**#*@
@@@*@###*@
@@#**#@*#@
*######@#*
#*@@#@##*@
@*#@@#**#*
*#*###***#
0

Chodzi mi o to, aby później można było w losowym miejscu tego pliku, w miejscu gdzie znajduje się któryś ze znaków @,*,# wstawić znak 'p' ,

A w następnej części musze zrobić program, który w tym pliku tekstowym kiedy nacisniemy ktorys z klawiszy wasd sprawi że literka p będzie przesuwac się w dane miejsce w pliku, chodzi mi o zadanie z tego linku

zad 2 i zad 3
https://www.youtube.com/watch[...]FA5fB8MfPXWDQ1Fy&index=45

1

Sam wstawiasz entery za pomocą znaki<<endl (linia 36). Jeżeli usuniesz tą instrukcję to wszystko będzie się zgadzać, chociaż wtedy będziesz miał wszystkie znaki w jednej linii (coś za coś) . Dlatego też niemożliwa jest sytuacja, w której w pliku będzie utworzony kwadrat 10x10 bez enterów.
Jeżeli chcesz zliczyć tylko liczbę znaków (bez enterów) to użyj następującej funkcji.

int getNumberOfCharacters( const string& filename )
{
    std::ifstream in(filename, std::ifstream::ate | std::ifstream::binary);
    return in.tellg();
}

A do losowej modyfikacji znaku można użyć funkcji:

void changeRandomCharacter( const string& filename , char newcharacter )
{
    ifstream in( filename );
    string line {};
    vector<string> lines;

    while( getline( in , line ) )
    {
        lines.push_back(line);
    }

    in.close();

    ofstream out( filename , ios::out | ios::trunc );

    auto random = rand()%100;
    for( auto& line : lines )
    {
        for( auto& character : line )
        {
            if(random--==0) character = newcharacter;
        }
        out << line << endl;
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0