O primeiro capítulo do "primer C ++":
1. Conte quantas vezes consecutivas cada valor aparece na 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;
}
Vantagens deste programa:
Primeiro: use uma instrução if para detectar se há entrada, para garantir que deve haver dados antes do processamento
Segundo: considere a primeira entrada como a entrada atual e use outra variável Val para pegá-la toda vez que você inserir na próxima vez e, em seguida, compare-a. Após a comparação, a variável atual CurVal é atualizada alternadamente. Isso usa duas variáveis A ideia de trabalho alternativo de entrada e detecção é muito boa.
Esta entrada de comprimento variável é inserida no final do arquivo. Se você quiser interrompê-lo com antecedência: Ctrl + Z (sistema Win) ou Ctrl + D no sistema Mac
2. Pesquise o valor de retorno de entrada e saída
Como todos sabemos, as funções retornarão valores. Na entrada e saída do fluxo C ++ IO, usamos as classes nas bibliotecas istream e ostream: std :: cin, std :: cout; a classe não tem valor de retorno, então o código acima: while (std :: cin >> O que Val) {} significa? Como essa instrução de entrada pode ser colocada em while para determinar a condição do loop? Poderia ser o valor de retorno do tipo bool? Vamos tentar escrever tal código: bool p = std::cin >> a;
Obtenha o erro da seguinte forma:
Verifique o código-fonte deste std :: cin:
A partir daqui, podemos ver que não estamos realmente gerando o valor de retorno da classe std :: cin, porque a classe não gera um valor de retorno ! Mas este operador: >>, sabemos que o operador binário é equivalente a uma função com parâmetros binários. O lado esquerdo desse operador leva uma classe istream como o operando esquerdo (ou seja, o primeiro parâmetro da função) e o operando direito é um objeto a ser operado. O conteúdo escrito na caixa de comando será escrito no operando direito. O objeto sobe. A passagem a seguir é do "primer C ++",
mas sobre como reescrever o operador binário em uma função com parâmetros binários, ainda não sei como pedir o conselho de um especialista!
Da linguagem C ++ para a linguagem C, sabemos que a entrada e a saída da linguagem C são realizadas por funções: scanf & printf; a função naturalmente tem um valor de retorno, vamos ver como é o seu 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 saída: EOF = -1, o valor de retorno de entrada e saída estilo C é 1 (indicando que o final do arquivo não foi alcançado e a entrada / saída foi bem-sucedida)
3. Redirecionamento de arquivo
Use o comando cmd para redirecionar no sistema Windows 10:"程序编译后的.exe可执行文件" <input.txt >out.txt
Benefícios do redirecionamento de arquivo:
Em um caso de teste oj alguns dias atrás, a quantidade de dados era enorme! Se eu copiar a entrada e a saída no console, será impossível copiar completamente! Porque a última maioria dos dados serão engolidos e não podem ser inseridos no console. então o que devemos fazer? Usamos o método "redirect" para colocar o arquivo de entrada em um arquivo txt e, em seguida, criamos um arquivo de saída (arquivo txt vazio). Em seguida, use o comando redirecionado acima para ver nossa saída!
Além disso, em relação ao redirecionamento, também há uma explicação sobre o "primer C ++":