substituição do fluxo de caracteres do c ++ em vez de acrescentar
<p>estou tentando criar um sistema básico de pontuação para um projeto em que estou trabalhando.</p><p>o problema que estou tendo é que, embora eu escreva os nomes no meu principal, eles apenas substituem o anterior.</p><p>atualmente eu tenho isso:</p><pre><code>void managepoint::savescore(string name, int score) { ofstream newfile("scorefile.txt"); if(newfile.is\_open()) { newfile &lt;&lt; name &lt;&lt; " " &lt;&lt; score; } else { //you're in trouble now mr! } newfile.close(); } </code></pre><p>e para testar eu estou adicionando eles da seguinte forma:</p><pre><code>runner-&gt;savescore("robert", 34322); runner-&gt;savescore("paul", 526); runner-&gt;savescore("maxim", 34322); </code></pre><p>na exibição de carga, tudo o que aparecerá é a pontuação de maxim, como posso percorrer e salvar todos eles ou anexar tudo ou algo assim?</p>
<p>você precisa abrir o arquivo com o modo de acréscimo:</p><pre><code>ofstream newfile("scorefile.txt", std::ios\_base::app); </code></pre><p>existem <a href="http://en.cppreference.com/w/cpp/io/basic\_ofstream/basic\_ofstream">vários outros modos</a> também.</p>
<p>em fluxos que suportam leitura e gravação, você tem duas posições, uma para leitura (por exemplo, "get" denotada por "g") e outra para gravação (ou seja, "put" denotada por "p").</p><p>e é por isso que você tem um <code>seekp</code> (herdado de <code>basic\_ostream</code>) e um <code>seekg</code> (herdado de <code>basic\_istream</code>).</p><p>nota: a linguagem c tem - em contraste com c++ - apenas uma dessas funções <code>fseek</code> para ambos os ponteiros; é necessário reposicionar o ponteiro quando se muda de leitura para escrita e vice-versa (por exemplo, <a href="https://stackoverflow.com/a/46152654/2630032">this</a> answer). para evitar isso, o c++ oferece funções separadas para leitura e gravação, respectivamente.</p> <p>dois caminhos. símbolos (<code>:foo</code> notação) ou constantes (<code>foo</code> notação).</p><p>os símbolos são apropriados quando você deseja melhorar a legibilidade sem conter o código com strings literais.</p><pre><code>postal\_code[:minnesota] = "mn" postal\_code[:new\_york] = "ny" </code></pre><p>constantes são apropriadas quando você tem um valor subjacente que é importante. apenas declare um módulo para manter suas constantes e, em seguida, declare as constantes dentro disso.</p><pre><code>module foo bar = 1 baz = 2 biz = 4 end flags = foo::bar | foo::baz # flags = 3 </code></pre> <p>tente isto:</p><pre><code>$str = preg\_replace\_callback('/\\\\u([0-9a-fa-f]{4})/', function ($match) { return mb\_convert\_encoding(pack('h*', $match[1]), 'utf-8', 'ucs-2be'); }, $str); </code></pre><p>caso seja baseado em utf-16, c/c++/java/json-style:</p><pre><code>$str = preg\_replace\_callback('/\\\\u([0-9a-fa-f]{4})/', function ($match) { return mb\_convert\_encoding(pack('h*', $match[1]), 'utf-8', 'utf-16be'); }, $str); </code></pre> normalmente esse problema acontece por problema no local onde o arquivo está sendo salvo.

ou o caminho tem mais do que 256 caracteres (que é o limite… os arquivos permitem gravar os dados de um programa de forma permanente em mídia digital.

vantagens de utilizar arquivos

armazenamento permanente de dados: as informações permanecem disponíveis mesmo que o programa que as gravou tenha sido encerrado, ou seja, podem ser consultadas a qualquer momento.
grande quantidade dados pode ser armazenada: a quantidade de dados que pode ser armazenada depende apenas da capacidade disponível da mídia de armazenamento. normalmente a capacidade da mídia é muito maior do que a capacidade disponível na memória ram.
acesso concorrente: vários programas podem acessar um arquivo de forma concorrente.
a linguagem c trata os arquivos como uma sequência de bytes. esta sequência pode ser manipulada de várias formas e para tanto, existem funções em c para criar, ler e escrever o conteúdo de arquivos independente de quais sejam os dados armazenados.

em c, o arquivo é manipulado através de um ponteiro especial para o arquivo.

a função deste ponteiro é “apontar” a localização de um registro.

sintaxe:
file < *ponteiro >

o tipo file está definido na biblioteca stdio.h.

exemplo de declaração de um ponteiro para arquivo em c:

file *pont\_arq;

lembrando que file deve ser escrito em letras maiúsculas. <p>olá daniel,</p>
<p>parece que o problema é que você está comparando o texto digitado no input com um número inteiro.</p>
<p>o valor retornado pela função <code>input</code> é string.</p>
<p>experimente modificar o código para:</p>
<pre class="prettyprint"><code>if g &#61;&#61; &#39;1&#39;:
 print(&#39;oque é oque é?&#39;)
 oque.adivinhacao()
elif g &#61;&#61; &#39;2&#39;:
 print(&#39;ultimas palavras?&#39;)
 game.forca()</code></pre><p>se tiver problemas avise...</p>
<p>luan</p> Não é exatamente o que você pediu, mas eu escrevi um Visual Studio Integration Package 2008, e se bem me lembro que eu poderia substituir o método "Add Reference", bem como herdar o "nó de referência" e, assim, mudar o seu comportamento, por exemplo seu construtor.


Esta funcionalidade pode estar faltando um add-in (que é mais limitada do que um pacote de integração), então você pode considerar escrever um pacote em seu lugar. Quando o documento é transferido através de HTTP, [as informações do cabeçalho HTTP são as informações crutial](http://www.w3.org/TR/html401/charset.html#h-5.2.2) :



> 
> [...] agentes de usuário conformes devem observar as seguintes prioridades para determinar a codificação de caracteres de um documento (da mais alta prioridade para a menor):
> 
> 
> 1. Um HTTP " `charset`" parâmetro em um " `Content-Type`campo".
> 2. Uma `META`declaração com " `http-equiv`" definido para " `Content-Type`" e um valor definido para " `charset`".
> 3. O `charset`conjunto de atributos em um elemento que designa um recurso externo.
> 
> 
> 


Portanto, verifique se você declarar a codificação de caracteres no [`Content-Type`campo de cabeçalho](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.17) e não apenas dentro do documento. <h2>7 bits ascii?</h2><p>se o seu tardis acabou de chegar em 1963, e você quer apenas o 7 bit imprimível ascii chars, você pode copiar tudo de 0 a 31 e 127 a 255 com isto:</p><pre><code>$string = preg\_replace('/[\x00-\x1f\x7f-\xff]/', '', $string); </code></pre><p>ele corresponde a qualquer coisa no intervalo de 0 a 31, 127 a 255 e remove-o. </p><h2>8 bits estendido ascii?</h2><p>você caiu em um time machine hot tub, e você está de volta nos anos oitenta. se você tem alguma forma de ascii de 8 bits, então você pode querer manter os caracteres no intervalo de 128-255. um ajuste fácil - basta olhar para 0-31 e 127</p><pre><code>$string = preg\_replace('/[\x00-\x1f\x7f]/', '', $string); </code></pre><h2>utf-8?</h2><p>ah, bem vindo de volta ao século 21. se você tem uma string codificada em utf-8, então o <code>/u</code> <a href="http://php.net/manual/en/reference.pcre.pattern.modifiers.php">modifier</a> pode ser usado no regex</p><pre><code>$string = preg\_replace('/[\x00-\x1f\x7f]/u', '', $string); </code></pre><p>isso apenas remove 0-31 e 127. isso funciona em ascii e utf-8 porque ambos compartilham o <a href="http://www.fileformat.info/info/charset/utf-8/list.htm">mesmo intervalo de conjunto de controles</a> (como observado por mgutt abaixo). estritamente falando, isso funcionaria sem o modificador <code>/u</code>. mas isso facilita a vida se você quiser remover outros caracteres ...</p><p>se você está lidando com unicode, existem <a href="https://stackoverflow.com/questions/3770117/what-is-the-range-of-unicode-printable-characters">potencialmente muitos elementos não-imprimíveis</a> , mas vamos considerar um simples: <a href="https://unicode-table.com/en/00a0/">no-break space (u + 00a0)</a> </p><p>em uma string utf-8, isso seria codificado como <code>0xc2a0</code>. você pode procurar e remover essa sequência específica, mas com o modificador <code>/u</code> no lugar, você pode simplesmente adicionar <code>\xa0</code> à classe de caractere:</p><pre><code>$string = preg\_replace('/[\x00-\x1f\x7f\xa0]/u', '', $string); </code></pre><h2>adenda: e sobre str\_replace?</h2><p>preg\_replace é bastante eficiente, mas se você está fazendo esta operação muito, você pode construir uma matriz de caracteres que você deseja remover, e usar str\_replace como observado por mgutt abaixo, por exemplo.</p><pre><code>//build an array we can re-use across several operations $badchar=array( // control characters chr(0), chr(1), chr(2), chr(3), chr(4), chr(5), chr(6), chr(7), chr(8), chr(9), chr(10), chr(11), chr(12), chr(13), chr(14), chr(15), chr(16), chr(17), chr(18), chr(19), chr(20), chr(21), chr(22), chr(23), chr(24), chr(25), chr(26), chr(27), chr(28), chr(29), chr(30), chr(31), // non-printing characters chr(127) ); //replace the unwanted chars $str2 = str\_replace($badchar, '', $str); </code></pre><p>intuitivamente, isso parece que seria rápido, mas nem sempre é o caso, você deve definitivamente comparar para ver se você economiza alguma coisa. fiz alguns benchmarks em vários comprimentos de string com dados aleatórios, e esse padrão surgiu usando o php 7.0.12</p><pre><code> 2 chars str\_replace 5.3439ms preg\_replace 2.9919ms preg\_replace is 44.01% faster 4 chars str\_replace 6.0701ms preg\_replace 1.4119ms preg\_replace is 76.74% faster 8 chars str\_replace 5.8119ms preg\_replace 2.0721ms preg\_replace is 64.35% faster 16 chars str\_replace 6.0401ms preg\_replace 2.1980ms preg\_replace is 63.61% faster 32 chars str\_replace 6.0320ms preg\_replace 2.6770ms preg\_replace is 55.62% faster 64 chars str\_replace 7.4198ms preg\_replace 4.4160ms preg\_replace is 40.48% faster 128 chars str\_replace 12.7239ms preg\_replace 7.5412ms preg\_replace is 40.73% faster 256 chars str\_replace 19.8820ms preg\_replace 17.1330ms preg\_replace is 13.83% faster 512 chars str\_replace 34.3399ms preg\_replace 34.0221ms preg\_replace is 0.93% faster 1024 chars str\_replace 57.1141ms preg\_replace 67.0300ms str\_replace is 14.79% faster 2048 chars str\_replace 94.7111ms preg\_replace 123.3189ms str\_replace is 23.20% faster 4096 chars str\_replace 227.7029ms preg\_replace 258.3771ms str\_replace is 11.87% faster 8192 chars str\_replace 506.3410ms preg\_replace 555.6269ms str\_replace is 8.87% faster 16384 chars str\_replace 1116.8811ms preg\_replace 1098.0589ms preg\_replace is 1.69% faster 32768 chars str\_replace 2299.3128ms preg\_replace 2222.8632ms preg\_replace is 3.32% faster </code></pre><p>os tempos próprios são para 10000 iterações, mas o que é mais interessante são as diferenças relativas. até 512 chars, eu estava vendo preg\_replace sempre vencer. no intervalo de 1-8kb, o str\_replace tinha um edge marginal. </p><p>eu pensei que era um resultado interessante, então incluí-lo aqui. <em>o importante é não pegar este resultado e usá-lo para decidir qual método utilizar, mas para fazer benchmark com seus próprios dados e depois decidir.</em></p> você fala da pontuação do tripadvisor? se for é uma pontuação simbólica o determinar seu nível no tripadivisor e não para trocar no múltiplos. abs douglas