La función cin.get () en c ++

El papel de cin.get: absorber cualquier carácter (incluidos los retornos de carro y los espacios) de la entrada estándar y priorizar la absorción de la caché de cin (el contenido residual de la cin anterior). 

#include <iostream>
#include <sstream>
#include <fstream>
using namespace std;
int main()
{
  char ch;
  ch =   cin.get();//从标准输入接受一个字符
  while(ch != ' ')        //只要这个字符不是' '空格即可
    {                        
      cout << ch << endl;   //ch不会放过任何字符,包括回车,但是输出一次,必须是回车后
      ch = cin.get();
    }
  cout << ch;                 //按键回车执行一次
  return 0;
}

Al igual que con la entrada de cadena, a veces usar cin >> para leer caracteres no se comportará como queremos.

Al leer datos con cin >>, el último carácter de nueva línea permanecerá en el búfer cin.

Por ejemplo, debido a que ignora todos los espacios en blanco iniciales, es imposible usar cin >> para ingresar solo un espacio o un retorno de carro. A menos que el usuario ingrese un carácter que no sea la barra espaciadora y el carácter de tabulación, el programa no podrá continuar la ejecución a través de la instrucción cin (una vez que se ingrese dicho carácter, aún debe presionar la tecla Enter antes de que el programa pueda continuar con la siguiente instrucción) . Por lo tanto, un programa que requiere que el usuario "presione la tecla enter para continuar" no puede usar el operador >> para leer solo el comportamiento de presionar la tecla enter.

En estos casos, el objeto cin tiene una función incorporada llamada get que es útil. Debido a que la función get está integrada en el objeto cin, se puede llamar una función miembro de cin. La función get member lee un solo carácter, incluidos los caracteres de espacio en blanco. Si el programa necesita almacenar el carácter que se está leyendo, puede llamar a la función get member de cualquiera de las siguientes formas.

En estos dos ejemplos, suponga que cin es el nombre de la variable char cuyo carácter se está leyendo:

cin.get (ch);
ch = cin.get ();

Si el programa está usando la función get para simplemente pausar la pantalla hasta que se presione la tecla Enter, y no hay necesidad de almacenar caracteres, la función también se puede llamar así:

cin.get ();

Tenga en cuenta que en las tres instrucciones de programación, el formato de la llamada a la función get es en realidad el mismo. El primero es el nombre del objeto, en este ejemplo es cin. Luego hay un punto, seguido del nombre de la función miembro que se llama, que por supuesto es get en este caso. Al final de la declaración hay un par de corchetes y un punto y coma para indicar el final. Este es el formato básico para llamar a cualquier función miembro, como se muestra en la Figura 1.


El formato básico de las llamadas a funciones miembro
Figura 1 El formato básico de las llamadas a funciones miembro


El siguiente programa demuestra las tres formas de usar la función get member:

 
  1. // Este programa demuestra tres formas de usar cin.get ()
  2. // para pausar un programa.
  3. #include <iostream>
  4. u sin g espacio de nombres std;
  5.  
  6. int main ()
  7. {
  8. char ch;
  9. cout << "Este programa se ha detenido. Presione Entrar para continuar.";
  10. cin.get (ch);
  11. cout << "Se ha detenido por segunda vez. Vuelva a pulsar Intro."; ch = cin.get ();
  12. cout << "Se ha detenido por tercera vez. Vuelva a pulsar Intro.";
  13. cin.get ();
  14. cout << "¡Gracias! \ n";
  15. return 0;
  16. }

Salida del programa:

Este programa se ha detenido. Presione Entrar para continuar.
Se ha detenido por segunda vez. Presione Enter nuevamente.
Se ha detenido por tercera vez. Presione Enter nuevamente.
¡Gracias!

Tenga en cuenta que al ejecutar el programa en el IDE, cuando el programa finaliza, la ventana de salida se cerrará y la función cin.get se puede utilizar para mantener visible la pantalla de salida.

Mezclar cin >> y cin.get

Mezclar cin >> con cin.get puede causar problemas molestos y difíciles de encontrar. Considere el siguiente ejemplo de fragmento de código:

char ch;    //定义一个字符变量
int number; //定义一个整型变量
cout << "Enter a number: ”;
cin >> number;   // 读取整数
cout << "Enter a character: ";
ch = cin.get() ;   // 读取字符
cout << "Thank You!\n";

Estas declaraciones permiten al usuario ingresar un número en lugar de un carácter. Parece que se ha omitido la declaración cin.get de la línea 6. Esto se debe a que cin >> y cin.get utilizan técnicas ligeramente diferentes para leer datos.

En el fragmento de código de muestra, cuando se ejecuta la línea 4, el usuario ingresa un número y luego presiona la tecla Intro. Suponga que se ingresa el número 100. Al presionar la tecla Enter, se almacenará un carácter de nueva línea ('\ n') después del número 100 en el búfer del teclado, como se muestra en la Figura 2.


Diagrama esquemático del almacenamiento y lectura del búfer del teclado
Figura 2 Diagrama esquemático del almacenamiento y lectura del búfer del teclado


Cuando la instrucción cin >> en la línea 4 lee los datos ingresados ​​por el usuario, se detiene cuando encuentra un carácter de nueva línea. El carácter de nueva línea no se lee, pero permanece en el búfer del teclado. La oración de entrada que lee datos del teclado solo espera a que el usuario ingrese un valor cuando el búfer del teclado está vacío, pero no lo está ahora.

Cuando se ejecuta la función cin.get en la línea 6, comienza a leer desde el búfer del teclado donde se detuvo la operación de entrada anterior y encuentra un carácter de nueva línea, por lo que no necesita esperar a que el usuario ingrese otro valor. La solución más directa a este problema es utilizar la función cin.ignore.

 

#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main()
{
  char ch;
  int number;
  cout << "Enter a number: ";
  cin >> number;
  cout << "Enter a character: ";
  ch = cin.get();
  while((ch=cin.get()) != '\n')
    continue;                        //这个程序会不断从cin缓存中读取字符放入ch中,直到遇到回车'\n',所以最后ch还是回车符
  cout << "Thank you!\n";
  cout <<"print the  ch:" << ch;
    if(ch == '\n')
      cout << "ch == '\n'";
 
      return 0;
}
#include <iostream>
#include <string>
using namespace std;
int main()
{
  char ch;
  ch = cin.get();
  cout << ch << endl;
 
  while(cin.get() != '\n')  //cin.get()会从缓存提取一个字符,如果有用则用,不用则丢弃
    cout << (char)(cin.get());
  return 0;
}

Con respecto al uso de cin () y cin.get () en C ++, las preguntas son las siguientes

char a [20];
int x;
cout << "input x";
cin >> x;
cout << "input character array:"
cin.get ();
gets (a);
why add cin.get () ? ? ? ?

Buena respuesta:

       get () es una función miembro 2113 del objeto cin, que se utiliza para absorber 5261 caracteres, donde se pueden absorber retornos de carro. 4102 De lo contrario, el retorno de carro también se almacenará en el grupo de 1653 caracteres a. Esto es equivalente a getchar () en un programa C, ¿entiendes?

Aquí, un getchar () es lo mismo que cin.get (). Si no me cree, puede intentarlo. .

Pedir

Vi en Baidu que la función cin de cin >> x; descarta los retornos de carro, es decir, los retornos de carro no se guardan en el flujo de entrada después de ingresar x, entonces ¿por qué usar get () para absorber retornos de carro?

Seguimiento

Sí, pero si presiona Enter y desea ingresar una cadena nuevamente, el programa terminará, a la derecha. . No comprende el uso de get. Si encuentra un retorno de carro, gets no funcionará como debería. . 

Puede generar un y probar usted mismo cuál es la diferencia. . . Este código debería ser de un libro, ¿verdad? Como programa, la 
solidez es muy importante. .

 

 

Supongo que te gusta

Origin blog.csdn.net/digitalkee/article/details/108895673
Recomendado
Clasificación