Aprendizaje del "manual básico de C ++": Capítulo 1 (notas y ejercicios de programación)

El primer capítulo de "C ++ primer":

1. ¿Cuenta cuántas veces consecutivas aparece cada valor en la entrada?

#include <iostream>

// 程序设计:键盘获取一组不定长输入,求每个值连续性地输入了多少次?
int main()
{
    
    
	int Val, CurVal;
	if (std::cin >> CurVal) {
    
    
		// 如果确实得到了输入
		int cnt = 1;// 连续输入的次数初始化
		while (std::cin >> Val) {
    
    
			if (CurVal == Val) 
				cnt++;
			else {
    
    
				std::cout << CurVal << " occupys :" << cnt << " times." << std::endl;
				cnt = 1;// 准备记录下一次的输入次数
			}
			CurVal = Val;
		}
		std::cout << CurVal << " occupys :" << cnt << " times." << std::endl;
		// 输出最后一组连续输入的元素的出现次数
	}
	return 0;
}

Ventajas de este programa:

Primero: use una instrucción if para detectar si hay entrada, para asegurarse de que debe haber datos antes del procesamiento

Segundo: considere la primera entrada como la entrada actual y use otra variable Val para capturarla cada vez que la ingrese la próxima vez, y luego compárela. Después de la comparación, la variable actual CurVal se actualiza alternativamente. Esto usa dos variables La idea del trabajo alternativo de entrada y detección es muy buena.
Inserte la descripción de la imagen aquí
Esta entrada de longitud variable se ingresa al final del archivo. Si desea interrumpirlo de antemano: Ctrl + Z (sistema win) o Ctrl + D en el sistema Mac

2. Investigue el valor de retorno de la entrada y la salida

Como todos sabemos, las funciones devolverán valores. En la entrada y salida del flujo de E / S de C ++, usamos las clases en las bibliotecas istream y ostream: std :: cin, std :: cout; la clase no tiene valor de retorno, entonces el código anterior: while (std :: cin >> ¿Qué significa Val) {}? ¿Cómo se puede poner esta declaración de entrada en while para determinar la condición del bucle? ¿Podría ser el valor de retorno del tipo bool? Intentemos escribir dicho código: bool p = std::cin >> a;Obtenga el error de la siguiente manera:
Inserte la descripción de la imagen aquí
Verifique el código fuente de este std :: cin:
Inserte la descripción de la imagen aquí
Desde aquí, podemos ver que realmente no estamos generando el valor de retorno de la clase std :: cin, porque la clase no genera un valor de retorno ! Pero este operador: >>, sabemos que el operador binario es equivalente a una función con parámetros binarios. El lado izquierdo de este operador toma una clase istream como el operando izquierdo (es decir, el primer parámetro de la función), y el operando derecho es un objeto para ser operado. El contenido escrito en el cuadro de comando se escribirá en el operando derecho. El objeto sube. El siguiente pasaje es de "C ++ primer",
Inserte la descripción de la imagen aquí
pero en cuanto a cómo reescribir el operador binario en una función con parámetros binarios, ¡todavía no sé cómo pedirle consejo a un experto!

Desde el lenguaje C ++ al lenguaje C, sabemos que la entrada y salida del lenguaje C se realizan mediante funciones: scanf & printf; la función naturalmente tiene un valor de retorno, ¿veamos cómo es su valor de retorno?

#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <iostream>

int main()
{
    
    
	int Val;
	bool p = scanf("%d", &Val);
	bool q = printf("%d", Val);
	std::cout << std::endl;

	std::cout << p << ' ' << q << std::endl;

	p = ~scanf("%d", &Val);
	q = ~printf("%d", Val);
	std::cout << std::endl;

	std::cout << p << ' ' << q << std::endl;

	std::cout << EOF << std::endl;

	return 0;
}

Resultado de salida: EOF = -1, el valor de retorno de entrada y salida de estilo C es 1 (lo que indica que no se ha alcanzado el final del archivo y que la entrada / salida es correcta)

Inserte la descripción de la imagen aquí

3. Redirección de archivos

Inserte la descripción de la imagen aquí
Use el comando cmd para redirigir en el sistema Windows 10:"程序编译后的.exe可执行文件" <input.txt >out.txt
Inserte la descripción de la imagen aquí

Beneficios de la redirección de archivos:

En un caso de prueba de OJ hace unos días, ¡la cantidad de datos era enorme! Si copio la entrada y la salida en la consola, ¡es imposible copiar completamente! Porque la mayoría de los datos se tragarán al final y no se pueden ingresar en la consola. entonces que debemos hacer? Usamos el método "redireccionar" para poner el archivo de entrada en un archivo txt, y luego creamos un archivo de salida (archivo txt vacío). ¡Luego use el comando redirigido anterior a la salida para ver nuestra salida!
Además, con respecto a la redirección, también hay una explicación sobre el "manual básico de C ++":

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_44274276/article/details/105277148
Recomendado
Clasificación