Ir ao conteúdo
  • Cadastre-se

C Copiar printf automaticamente para CTRL C.


Gabrielvess

Posts recomendados

Olá pessoal. Estou montando uma ferramenta simples em C para me ajudar a gerar uma mensagem com todos cálculos feitos pra por nas respostas de orçamento no mercado livre. Porém na hora de copiar a mensagem estou tendo problemas, já que o programa roda no prompt do dev C++. Queria saber se tem algum comando em C para copiar o printff com a mensagem automaticamente para o CRTL C. Não sou programador, apenas aprendi o básico no curso de engenharia e estou estudando mais agora, mas não achei nada relacionado a isso em outro lugar. Agradeço desde já!  

#include <stdio.h>
#include <conio.h>
#include <locale.h>
#include <math.h>


void main()
{
	setlocale(LC_ALL, "Portuguese");
	float precot, total, precop;
	int quant, quanp, frete, op, produto, x;
	char cliente[500], msg[700];
	x == 1;
	
	while(x==1)
	{

	printf("Produto (TELHAS = 1)(CHAPA = 2): ");
	scanf("%i", &op);
	
	printf("Nome do cliente:  ");
	scanf("%s", &cliente);
	
	printf("Quantidade telha/chapa: ");
	scanf("%i", &quant);
	
	printf("Preco telha/chapa: ");
	scanf("%f", &precot);
	
	printf("Preco parafuso: ");
	scanf("%f", &precop);
	
	printf("Preco frete: ");
	scanf("%i", &frete);
	
	if(op==1)
	{
		
		if(quant>=15)
		{
			quanp = quant*4;
			while(quanp%10 !=0)
			{
				quanp++;
			}
			precot = quant*precot;
			precop = quanp*precop;
			precot = floor(precot);
			precop = floor(precop);
		
			total = precop + precot + frete;
			total = floor(total);
		
			printf("\n\nOlá %s. %i telhas R$ %.f,00 + %i parafusos R$ %.f,00 + Frete R$ %i,00 TOTAL R$ %.f,00 via mercado livre. Entrega em área urbana. Caso for comprar preciso que me avise antecipadamente para eu criar um anuncio personalizado com o valor total da sua compra, pois o mercado livre mudou a plataforma e o cliente não consegue mais inserir o frete. Caso comprar direto e não avisar sobre a compra, o frete será recalculado pois terá taxa do mercado livre sobre o frete. Ecopreserve agradece pelo contato e aguarda sua compra. \n\n", cliente, quant, precot, quanp, precop, frete, total);
		}
		else
		{
		
			precot = quant*precot;
			total = precot + frete;
			
			printf("\n\nOlá %s. %i telhas R$ %.f,00 + Frete R$ %i,00 TOTAL R$ %.f,00 via mercado livre. Entrega em área urbana. Caso for comprar preciso que me avise antecipadamente para eu criar um anuncio personalizado com o valor total da sua compra, pois o mercado livre mudou a plataforma e o cliente não consegue mais inserir o frete. Caso comprar direto e não avisar sobre a compra, o frete será recalculado pois terá taxa do mercado livre sobre o frete. Ecopreserve agradece pelo contato e aguarda sua compra.\n\n", cliente, quant, precot, frete, total);
		}
	}
	if(op == 2)
	{
			
		precot = quant*precot;
		precot = floor(precot);
		
		total = precop + precot + frete;
		total = floor(total);
		
		printf("\n\nOlá %s. %i chapas R$ %.f,00 + Frete R$ %i,00 TOTAL R$ %.f,00 via mercado livre. Entrega em área urbana. Caso for comprar preciso que me avise antecipadamente para eu criar um anuncio personalizado com o valor total da sua compra, pois o mercado livre mudou a plataforma e o cliente não consegue mais inserir o frete. Caso comprar direto e não avisar sobre a compra, o frete será recalculado pois terá taxa do mercado livre sobre o frete. Ecopreserve agradece pelo contato e aguarda sua compra.\n\n", cliente, quant, precot, frete, total);
		
	}
	
}
}

 

Link para o comentário
Compartilhar em outros sites

58 minutos atrás, Gabrielvess disse:

se tem algum comando em C para copiar o printff com a mensagem automaticamente para o CRTL C

 

Não consegui entender :(

 

printf() é uma função,o resultado vai para a saída padrão.

control C é uma combinação de teclas, e dependendo da configuração e do sistema pode gerar uma interrupção, um sinal no Linux que você pode interceptar e associar a uma função em seu programa. No Windows não funciona assim.

 

Estaria usando Windows e quer copiar um texto para a área de transferência? Se for esse o caso a documentação está toda aqui em https://docs.microsoft.com/en-us/windows/win32/dataxchg/about-the-clipboard 

 

 

Link para o comentário
Compartilhar em outros sites

@arfneto Eu queria apenas saber uma forma de copiar o texto que sai de alguns dos printf, pois naquela interface do prompt não consigo copiar apenas a mensagem, quando eu copio vem tudo o que digitei. Quando eu gero a mensagem quero copiar somente essa parte: 


"Olá TESTE. 15 telhas R$ 573,00 + 60 parafusos R$ 37,00 + Frete R$ 100,00 TOTAL R$ 710,00 via mercado livre. Entrega em área urbana. Caso for comprar preciso que me avise antecipadamente para eu criar um anuncio personalizado com o valor total da sua compra, pois o mercado livre mudou a plataforma e o cliente não consegue mais inserir o frete. Caso comprar direto e não avisar sobre a compra, o frete será recalculado pois terá taxa do mercado livre sobre o frete. Ecopreserve agradece pelo contato e aguarda sua compra."

 

E não tudo que, que no caso seria isso:

 

"Produto (TELHAS = 1)(CHAPA = 2): 1
Nome do cliente:  TESTE
Quantidade telha/chapa: 15
Preco telha/chapa: 38,2
Preco parafuso: 0,62
Preco frete: 100


Olá TESTE. 15 telhas R$ 573,00 + 60 parafusos R$ 37,00 + Frete R$ 100,00 TOTAL R$ 710,00 via mercado livre. Entrega em área urbana. Caso for comprar preciso que me avise antecipadamente para eu criar um anuncio personalizado com o valor total da sua compra, pois o mercado livre mudou a plataforma e o cliente não consegue mais inserir o frete. Caso comprar direto e não avisar sobre a compra, o frete será recalculado pois terá taxa do mercado livre sobre o frete. Ecopreserve agradece pelo contato e aguarda sua compra.

Produto (TELHAS = 1)(CHAPA = 2):"

 

O segundo jeito, que é o que está funcionado pra mim é bom. Porém faço muitos orçamentos por dia, e ficar editando toda vez no bloco de nota faz eu perder um pouco de tempo. Queria otimizar isso. 

Link para o comentário
Compartilhar em outros sites

O que você quer é copia um texto para o CLIPBOARD do windows. É possível sim, mas complexo. 

Pelo que saiba, você teria que desenvolver para Windows usando sua API.

https://docs.microsoft.com/en-us/windows/win32/dataxchg/clipboard

Nesse link tem um exemplo:

http://www.cplusplus.com/forum/beginner/14349/

 

Link para o comentário
Compartilhar em outros sites

4 horas atrás, Gabrielvess disse:

@arfneto Eu queria apenas saber uma forma de copiar o texto que sai de alguns dos printf, pois naquela interface do prompt não consigo copiar apenas a mensagem, quando eu copio vem tudo o que digitei. Quando eu gero a mensagem quero copiar somente essa parte: 


"Olá TESTE. 15 telhas R$ 573,00 + 60 parafusos R$ 37,00 + Frete R$ 100,00 TOTAL R$ 710,00 via mercado livre. Entrega em área urbana. Caso for comprar preciso que me avise antecipadamente para eu criar um anuncio personalizado com o valor total da sua compra, pois o mercado livre mudou a plataforma e o cliente não consegue mais inserir o frete. Caso comprar direto e não avisar sobre a compra, o frete será recalculado pois terá taxa do mercado livre sobre o frete. Ecopreserve agradece pelo contato e aguarda sua compra."

 

E não tudo que, que no caso seria isso:

 

"Produto (TELHAS = 1)(CHAPA = 2): 1
Nome do cliente:  TESTE
Quantidade telha/chapa: 15
Preco telha/chapa: 38,2
Preco parafuso: 0,62
Preco frete: 100


Olá TESTE. 15 telhas R$ 573,00 + 60 parafusos R$ 37,00 + Frete R$ 100,00 TOTAL R$ 710,00 via mercado livre. Entrega em área urbana. Caso for comprar preciso que me avise antecipadamente para eu criar um anuncio personalizado com o valor total da sua compra, pois o mercado livre mudou a plataforma e o cliente não consegue mais inserir o frete. Caso comprar direto e não avisar sobre a compra, o frete será recalculado pois terá taxa do mercado livre sobre o frete. Ecopreserve agradece pelo contato e aguarda sua compra.

Produto (TELHAS = 1)(CHAPA = 2):"

 

O segundo jeito, que é o que está funcionado pra mim é bom. Porém faço muitos orçamentos por dia, e ficar editando toda vez no bloco de nota faz eu perder um pouco de tempo. Queria otimizar isso. 

Seu programa já está funcionando e você só quer dar CNTRL+C no output no fim do programa né?

Só que ao dar CNTRL+C você copia o output e mais algumas coisas do windows certo?

 

Primeiro me diga seu compilador.

Link para o comentário
Compartilhar em outros sites

8 horas atrás, Gabrielvess disse:

O segundo jeito, que é o que está funcionado pra mim é bom. Porém faço muitos orçamentos por dia, e ficar editando toda vez no bloco de nota faz eu perder um pouco de tempo. Queria otimizar isso

 

Entendo.

A documentação diz que esses mecanismos de acesso à área de transferência são reservados para projetos do tipo desktop e não para programas de console, mas acho que ao menos em C++ deve ser possível replicar o funcionamento.  Testei algumas das funções e parece que todas funcionam no ambiente da console. Mas é um processo complicado para de fato criar um teste completo. Se eu tiver tempo de criar um programa eu posto aqui.

 

Em essência o problema é que a área de transferência é uma área global de transferência, e pode conter um número enorme de coisas diferentes, algumas até criadas pelo usuário. E pode ter apenas um "dono" por vez na hora de gravar. E tem que alocar um recurso global e pode conter por exemplo um texto, ou uma foto, ou uma lista de arquivos, como quando você arrasta um ícone de um programa para a janela do compilador e ele abre o arquivo --- não sei se o compilador que usa faz isso., mas acho que entendeu o exemplo: drag & drop se chama.

 

Programas de console vivem em um ambiente mais ou menos separado no Windows, e fica difícil e muitas vezes impossível usar coisas dos projetos desktop. Em C# você tem uma classe clipboard que tem essas funções facinho. Em C++ usando aplicações de console precisaria testar mais com a documentação que te passei antes. Para desktop seria tranquilo.

 

De todo modo, para o seu problema talvez não precise passar por isso. Sugiro

  • não rodar programas do prompt do compilador. Não faz sentido. Arrume seu programa e gere um executável. Não há razão para compilar e gerar o mesmo código toda vez que faz um orçamento.
  • Mude seu programa para gerar, além da saída na tela que já te atende, uma saída em um arquivo de texto, via fprintf() que é igualzinho ao printf(). E nesse arquivo gere exatamente no formato que quer importar pro mercado livre.
  • Gere um atalho para rodar o seu programa e um atalho para abrir por exemplo o Bloco de Notas com o seu texto.
  • Clica no atalho de seu programa e gera o orçamento
  • Clica no atalho do notepad e abre o novo arquivo gerado
  • No bloco de notas, control A seleciona o texto todo, Control C copia. E vai tudo certo já que foi você que escreveu o programa
  • No mercado livre, control V copia o orçamento
  • E a vida segue

Um exemplo mais integrado:

 

Claro, não use telas maximizadas no Windows. São muito pouco produtivas e não vai conseguir fazer o que estou explicando. E quando são produtivas o próprio programa terá um atalho para isso. Meu compilador usa Alt-Shift-Enter, o Windows em geral usa F11, como o navegador Edge, o navegador Chrome...

 

Na tela do prompt de comando: para rodar o programa de novo para um próximo orçamento basta usar a seta para cima --- veja na imagem abaixo

 

No notepad control-O abre um novo arquivo, mas pode só fechar o programa e abrir com o atalho que ele abre na mesma posição na janela... E no fundo nem precisa do atalho porque pode abrir o bloco de notas com o arquivo gerado pelo programa usando o próprio prompt de comando

Se você tiver um programa de orçamento C chamado ch-testec.c vai gerar um executável ch-testec.exe. Se seu programa exigir um argumento com o nome do arquivo de teste pode abrir o orçamento direto no NotePad assim por exemplo

ch-testec arquivo.txt && notepad arquivo.txt

O efeito do "&&" é chamar o comando seguinte --- notepad arquivo.txt --- se o comando anterior --- ch-testec arquivo.txt --- retornou ok. Ou seja, o seu programa retornou 0 em main(). E aí o orçamento gerado já abre no bloco de notas...

Se for importante você pode até usar um arquivo .BAT e ir numerando os orçamentos, como arquivo1.txt, arquivo2.txt ... de modo a não perder nenhum se for importante.

Aberto no bloco de notas você usa Control-A, Control-C e vai no mercado livre com alt-TAB se já está com o site aberto, e já cola o orçamento com control-C claro

 

Veja uma tela assim, depois de rodar o programa:

 

1648886407_CapturadeTela(58).thumb.png.3cf795de31cdee9be17e5d64d2eb2191.png

 

E um protótipo do programa

#define _CRT_SECURE_NO_WARNINGS
#include "stdio.h"
#include "stdlib.h"

int main(int argc, char** argv)
{
	if (argc < 2)
	{
		fprintf(stderr,
			"\nCancelando: Faltou o nome do arquivo de saida\n\n");
		return -1;
	}

	FILE* saida = fopen(argv[1], "w");
	if (saida == NULL)
	{
		fprintf(stderr,
			"Nao conseguiu abrir [%s]\n",
			argv[1]
		);
		return -1;
	}
	fprintf(stderr, "Criado [%s]\n", argv[1]);
	fprintf(saida, "gerado pelo programa\n");
	for (int i = 1; i <= 10; i += 1)
		fprintf(saida, "Orcamento linha %02d\n", i);
	fclose(saida);
};	// main()

E para rodar o programa de novo basta voltar no prompt e usar a seta para cima...

 

Acha que serve?

 

 

 

 

 

Link para o comentário
Compartilhar em outros sites

@caiobcc Isso mesmo, eu uso dev c++. Ele gera um executável no prompt de comando. Tentei criar outros projetos com interface mas me pareceu complicado por ele. 

adicionado 45 minutos depois

@arfneto Entendi, obrigado pela ajuda.

Eu tentei fazer o programa abrir um bloco de notas tudo certinho, até ai funcionou. Mas na hora de colocar o fprintf no bloco, ele não ia para o bloco. As vezes posso ter montado a estrutura errado, mas pelo que eu entendi as funções que pesquisei apenas pega os dados que eu digitei após o fprintf e não a estrutura montada com as variáveis. 

Link para o comentário
Compartilhar em outros sites

2 horas atrás, Gabrielvess disse:

Eu tentei fazer o programa abrir um bloco de notas tudo certinho, até ai funcionou. Mas na hora de colocar o fprintf no bloco, ele não ia para o bloco. As vezes posso ter montado a estrutura errado, mas pelo que eu entendi as funções que pesquisei apenas pega os dados que eu digitei após o fprintf e não a estrutura montada com as variáveis

 

Viu o exemplo que te mostrei? É só isso. Você põe seu código no programa que eu mostrei, no lugar daquele for que imprime as linhas de teste. E seu programa gera o arquivo com o nome que voce quiser e o notepad abre em seguida o arquivo novo...

ch-testec arquivo.txt && notepad arquivo.txt

Assim. Viu a imagem da tela?

Link para o comentário
Compartilhar em outros sites

14 minutos atrás, Gabrielvess disse:

ão consigo executar o programa pelo Dev C++, teria que fazer algo a mais? Eu já tenho o executável gerado pelo devc++

 

Dev C++ é um ambiente de desenvolvimento. Ele usa um compilador externo, tipo gcc ou mingw ou algo assim. Eu não uso esse ambiente.

 

Mas o fato é que ele acaba gerando um executável, um arquivo que deve ter o mesmo nome que seu programa em c. pgm.c gera pgm.exe por exemplo.

 

Esse pgm.exe você pode levar para qualquer computador e rodar. Só digitando o nome. Afinal é para isso que a gente um programa: para rodar em outras máquinas.

 

Dev C++ já cumpriu seu papel quando seu programa ficou pronto.

 

Você pode rodar o programa direto no executar do Windows, e no seu caso serviria até. Mas em geral você abre uma janela de comando, rodando Windows+R e CMD e ENTER. Isso porque a janela de execução de seu programa fecha ao final do programa e isso pode deixar o usuário inseguro. Um outro caminho, mais comprido, aperta iniciar e escreve "prompt de comando" claro que não precisa escrever tudo. Já vai apareer na tela:

coisa.png.0160954b3269a113d4bd54274934bfe1.png

 

Na janela que vai abrir, a tal  "Prompt de comando" você digita o nome do seu programa. O nome completo.

 

É essa sua dúvida? Viu a janela que eu postei com a imagem do terminal rodando isso?

 

Link para o comentário
Compartilhar em outros sites

19 minutos atrás, Gabrielvess disse:

@arfneto Não consegui ainda, eu uso windows 7 no momento. Estaria interferindo em algo isso?

Não. Windows 10 é mais esperto apenas. Algo que não é estranho já que Windows 7 foi lançado em 2009
Talvez pudesse explicar o que não está conseguindo. Seu IDE vai usar o compilador externo para gerar um arquivo executável. Só isso. Ele fez isso? Achou o executavel?

Achou onde abrir a janela do prompt de comando?

Viu a imagem que te mostrei com as 3 janelas abertas?

Link para o comentário
Compartilhar em outros sites

1 hora atrás, arfneto disse:

Não. Windows 10 é mais esperto apenas. Algo que não é estranho já que Windows 7 foi lançado em 2009
Talvez pudesse explicar o que não está conseguindo. Seu IDE vai usar o compilador externo para gerar um arquivo executável. Só isso. Ele fez isso? Achou o executavel?

Achou onde abrir a janela do prompt de comando?

Viu a imagem que te mostrei com as 3 janelas abertas?

Agora consegui! O programa está rodando certinho, só editei o código para abrir em html para facilitar um pouco. Obrigado pela ajuda!!!

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

46 minutos atrás, Gabrielvess disse:

Agora consegui! O programa está rodando certinho, só editei o código para abrir em html para facilitar um pouco

 

Não sei se entendi, mas você pode gerar o código em HTML no arquivo de saída do seu programa em C e assim não ter que mexer em nada para colar do outro lado, se é disso que precisa

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!