C ++ cin char ler símbolo por símbolo

Eu preciso ler símbolo por símbolo. Mas eu não sei ler até o final da input. Como exemplo, o sistema de teste pode variar em algumas vezes. Eu tenho que ler símbolo por símbolo todos os caracteres. Apenas m vezes. Como posso fazer isso?

Se você deseja inserir caracteres formatados por caractere, faça o seguinte:

 char c; while (infile >> c) { // process character c } 

Se você quiser ler bytes brutos, faça o seguinte:

 char b; while (infile.get(b)) // while(infile.read(&b, 1) // alternative, compare and profile { // process byte b } 

Em qualquer caso, o infile deve ser do tipo std::istream & ou similar, como um arquivo ou std::cin .

Existem várias maneiras de ler um caractere por vez até que você tenha lido todas elas, e nenhuma delas é necessariamente a melhor.

Pessoalmente, eu iria com o seguinte código:

 char c; while (cin.get(c)) { // Process c here. } 

Se você só precisa ler m caracteres, considere usar um loop for :

 char c; for (unsigned int i = 0; i < m && cin.get(c); ++i) { // Process c here. } 

Isso executa o loop desde que duas condições sejam atendidas: (1) menos de m caracteres foram lidos e (2) ainda existem caracteres para serem lidos.

No entanto, ambas as soluções têm uma desvantagem: elas são relativamente ineficientes. É mais eficiente ler os m caracteres de uma só vez.

Portanto, primeiro aloque um buffer grande o suficiente para armazenar m chars e tente lê-los:

 std::vector buffer(m); cin.read(&m[0], m); unsigned total_read = cin.gcount(); 

Observe a última linha - isso lhe dirá se m caracteres foram realmente lidos.

Tente isto:

 #include  using std::cin; using std::cout; int main(int argc, char *argv[]) { char ch; unsigned m = 10; while (cin && m--) { cin.read(&ch, sizeof(ch)); cout << ch; } return 0; }