Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sσwyєяº

o0

Recommended Posts

Bom galera ..eu estou com duas dúvidas que são de lascar...

 

tipo... eu queria saber como eu faço para "controlar" (digamos assim) a exibição do programa assim que ele é rodado.. ou seja .. a aparência do console ..

 

pois o padrão dele é 80 por 25 e com uma fonte de varredura ,fundo preto e cor da fonte branca..

 

 

e acho isso horrível... e queria mudar...

 

bom procurando um pouco eu descobri que na função system(); dá pra você alterar algumas coisa... tipo

 

se eu colocar a função system("color 11"); (exemplo) ele muda de cor...(o fundo..) mas que quero tb controlar o tamanho da janela ... pois eu escrevo os códigos para uma janela de 146x60. Ai eu queria que quando gerasse o .exe do programa, quando ele fosse ser execultado, independente dos padrões que tenha no pc , ele (o programa) consiga mudar o tamanho e a cor da janela ...deu pra entender ?

 

 

a outra dúvida é o seguinte...

 

 

vejam essa função de um programa que eu estou escrevendo...

 

CODE
ComTemp()

{

int Aux;

int X;

puts("\t+======================================================================+");

puts("\t| Escolha o Tipo De Conversao Que você Quer Fazer. |");

puts("\t+======================+==============================================+");

puts("\t| | |");

puts("\t| [1]->Fahrenheit Para Celsius. | [4]->Celsius Para Kelvin. |");

puts("\t| [2]->Fahrenheit Para Kelvin. | [5]->Kelvin Para Fahrenheit.|");

puts("\t| [3]->Celsius Para Fahrenheit. | [6]->Kelvin Para Celsius. |");

puts("\t|----------------------------------------+----------------------------+");

puts("\t| [0]-> Para Sair. | |");

puts("\t+---------------------------------------+-----------------------------+\n\n");

puts("\n\n");

scanf("%d",&X);

puts("\n\n");

switch (X)

{

.

.

.

.

}

 

 

 

Reparem que esse tipo de menu só deve suportar caracteres numéricos ... ou seja, a minha dúvida é como fazer para restringir isso .

 

tipo ..assim que o sujeito teclasse uma letra.. gerasse uma msg de erro ou coisa parecida!...

 

entendem ?

 

pois é.. se alguem souber me ajudar..por favor será de grande ajuda.... ! ^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha brother quanto ao fato de querer restringir letras, acredito que tenha que criar uma função que faça uma varredura no teclado (nas 256 posições possíveis), pois acho que não existe uma função predifinida, como no php e em outras linguagens.

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara. pré definida não... mas veja só ..se fosse caracteres dava pra fazer algo usando o scanset

 

veja...

 

um scanset define um conjunto de caracteres que pode ser lido por scanf e atribui a matriz correspondente..

l

Ex:

 

#include <stdio.h>
main() {
	   int i;
	   char str[80],str2[80];
	   printf("Digite 123abcdtye . Depois aperte enter\n\n");
	   scanf("%d%[abcdefg]%s",&i,&str,str2);
	   printf("%d %s %s\n\n",i,str,str2);
	   system("pause");
}

nesse código a saida é 123 abcd tye. scanf() finaliza a leitura para str quando encontra o "t" porque ele não faz parte dos canset.Os caracteres restantes são colocados em str2.

 

 

logo com strings acho que dava pra fazer .. mas com números ??

Compartilhar este post


Link para o post
Compartilhar em outros sites

é so utilizar if para os casos e else para tudo que esta fora, tipo

if(escolha=='1')

//dai você escreve a formula;

if(escolha=='2')

//dai você escreve a formula;

if(escolha=='3')

//dai você escreve a formula;

if(escolha=='4')

//dai você escreve a formula;

if(escolha=='5')

//dai você escreve a formula;

if(escolha=='6')

//dai você escreve a formula;

else

printf("Opção inexistente tente novamente");

Dai você poderia colocar tudo dentro de um while ir fazendo o loop.

Coloquei desta forma porque sei que as formulas são diferentes. mas poderia utilizar um if somente antes do while para separar isso, tipo:

 

if((escolha>='1')&&(escolha<='6'))

//poderia iniciar o while aqui

else

//mensagem de erro

Mas fugiria do loop e fecharia o programa... teria que ter outro loop.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não cara.. você não entendeu o que eu quis dizer.. tipo o switch (X) já serve justamente pra mim não ter qur ficar fazendo esses sucessivos testes ...

 

ele já acha qual foi a escolha do sujeito e execulta o case correspondente...

 

a grande questão é fazer o programa apenas lê caracteres numéricos .. ou seja .. se ele sem querer digitar uma letra,simplesmente não iria para o endereço de &X..

 

se eu fosse fazer esse testes usando if teria que fazer para todos os caracteres do teclado ... ¬¬ e o meu programa já tem mais de 1000 linha ... imagina com quantas ele ficaria ???

 

 

o problema é : fazer o scanf (ou outra função correspondente) leia apenas números ..

Compartilhar este post


Link para o post
Compartilhar em outros sites

a grande questão é fazer o programa apenas lê caracteres numéricos .. ou seja .. se ele sem querer digitar uma letra,simplesmente não iria para o endereço de &X..

 

se eu fosse fazer esse testes usando if teria que fazer para todos os caracteres do teclado ... ¬¬ e o meu programa já tem mais de 1000 linha ... imagina com quantas ele ficaria ???

Acho que você não entendeu a minha resposta, tipo:

é so utilizar if para os casos e else para tudo que esta fora, tipo

if para 1,2,3,4,5,6

else para todas as outras teclas do teclado.

 

Seria como eu falei 6 ifs (de 1 a 6) e um else (para todas as outras coisas que ele digitar.)

Mas se você quizer um swith tambem funciona mas terá que fazer um if para o que for teclado e estiver dentro das opções de depois do swtch tera que fazer um else para o que não estiver....

Compartilhar este post


Link para o post
Compartilhar em outros sites

agora foi que eu não entendi ... ¬¬

Vou fazer utilizando o seu codigo.

 

CODE
ComTemp()

{

int Aux;

int X;

puts("\t+======================================================================+");

puts("\t| Escolha o Tipo De Conversao Que você Quer Fazer. |");

puts("\t+======================+==============================================+");

puts("\t| | |");

puts("\t| [1]->Fahrenheit Para Celsius. | [4]->Celsius Para Kelvin. |");

puts("\t| [2]->Fahrenheit Para Kelvin. | [5]->Kelvin Para Fahrenheit.|");

puts("\t| [3]->Celsius Para Fahrenheit. | [6]->Kelvin Para Celsius. |");

puts("\t|----------------------------------------+----------------------------+");

puts("\t| [0]-> Para Sair. | |");

puts("\t+---------------------------------------+-----------------------------+\n\n");

puts("\n\n");

scanf("%d",&X);

puts("\n\n");

switch (X)

{

.

.

.

.

}

 

O codigo que eu criei vou escrever a formula:

if(X=='1')
{
printf("Digite a temperatura em Farenheight");
scanf(faren);
celsius=((faren-32)/9)*5;
printf("A temperatura em graus celsius é %f",celsius);
}
if(X=='2')
//dai você escreve a formula;
if(X=='3')
//dai você escreve a formula;
if(X=='4')
//dai você escreve a formula;
if(X=='5')
//dai você escreve a formula;
if(X=='6')
//dai você escreve a formula;
else 
printf("Opção inexistente tente novamente");
Alterei a variavel escolha para X conforme seu código.

 

Reparem que esse tipo de menu só deve suportar caracteres numéricos ... ou seja, a minha dúvida é como fazer para restringir isso .

Ele ira fazer o calculo somente se estiver dentro de uma das condições do if, se o que ele digitar não estiver dentre as especificadas ele ira para else.

 

tipo ..assim que o sujeito teclasse uma letra.. gerasse uma msg de erro ou coisa parecida!...

 

entendem ?

Ele imprimira na tela o que esta no else ou seja "Opção inexistente tente novamente".

 

Claro terá que incluir e discriminar o tipo das variaveis, usando o swith você poderá fazer direto, mas terá que utilizar um if e else para separar o que atende as opções do menu de tudo aquilo que não atende como neste codigo que postei:

if((escolha>='1')&&(escolha<='6'))

//poderia iniciar o while aqui

else

//mensagem de erro

so que invés de acionar o while você poderá acionar um with com as opções formulas e printf, lembrando que neste caso o escolha refere-se ao X de seu código.

Compartilhar este post


Link para o post
Compartilhar em outros sites

veja isso...

 

#include <stdio.h>
#include <string.h>
main()
{
	  int X;
	  char k;
			system("color 11");
			puts("\n\n");
			puts("\t\t\t	  ");
			puts("\n\n");
			puts("==========================================================");
			puts("		Escolha O Que você Quer Fazer...\n");
			puts("==========================================================");
			puts("	[1] -> Renomear IP:		   [2] -> Mostrar IP:\n\n");			
			scanf("%d",&X);
			if((X==1)||(X==2))
			{
			   puts("\n\n");
				 switch(X)
					{
					 case 1: puts("RENOVANDO IP...\n");
							 system("ipconfig/release");
							 system("ipconfig/flushdns");
							 system("ipconfig/renew");
							 puts("RENOVADO COM SUCESSO!\n\n");
					 break;
					 
					 case 2: puts("INFORMACOES SOBRE SUA CONEXAO E IP:\n\n");
							 system("ipconfig");
							 puts("\n\n");
							 break;
					 default: puts("\aOPCAO INIXISTENTE!!!\n\n");
				   }
			}
		   else
		   puts("Teste do erro:\n\n");
   getche();
}

você esta falando algo como isso certo ? depois que scanf lê a entrada do teclado o if avaliar se é um ou 2 e caso seja execulte o case correspondente... caso não vá para :

 

puts("Teste do erro:\n\n");

 

 

seria isso ? pq se for não funciona... pq o que você está tentando fazer é : o cara digita o caractere e você coloca umif para ver se ele esta entre os da opção do menu.. caso sim ele execulta ..caso não msn de erro.

 

bom não é isso que eu quero... isso eu já sabia...afinal o swich faz isso... eu quero é saber ou criar uma função que não leia caracteres. apenas numeros... do geito que você está dizendo ele vailer caractere.. mas vai avaliar se o mesmo está no menu....

 

mas não é isso que eu quero saber... eu quero saber se scanf pode ser restrito a ler somente numeros.. ou se existe outra função correspondente que faça isso.

 

pois ler e avaliar isso o swich e o if fazem...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem entendi errado, mas basicamente o que passei atenderia suas perguntas, e ao que o sistema precisa, so que você queria que ele aparecesse a mensagem quando precionado a tecla... bem realmente teria que criar uma função parecida como a de validação que existe em outras linguagens tipo OnKeyPress, talves encontre alguma coisa que funcione para C aqui em tutoriais.

 

Estava tentando ajudar, mas se encontrar algo que funcione quando precionado a tecla volte aqui e coloque aqui para nós.

Compartilhar este post


Link para o post
Compartilhar em outros sites

to meio q boiando hehe!

ql sua principal dúvida no momento?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha um exemplo de como verifico se é letra ou número:

 

#include <stdio.h>
#include <stdlib.h>
main() {
   int menu;
   printf("Digite a opcao:\n");
   if (scanf("%d",&menu) == 0) {
						 printf("\nEntre com um inteiro!\n\n");
						 }
   else {
		printf("\nVoce escolheu a opcao %d.\n\n", menu);
		}
   system("pause");
}

Vê se ajuda, se precisar que eu explique o motivo do uso do scanf igual a zero depois eu posto...

 

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vê se ajuda, se precisar que eu explique o motivo do uso do scanf igual a zero depois eu posto...

 

Abraço!

 

cara eu já tinha tentado isso... passar como parâmetros.. mas ñ funciona tb... tipo... para a primeira execulção sim...

 

mas quando eu tento colocar em um do while ele não funciona... é uma m*****! ¬¬ ..veja....

 

 

#include <stdio.h>
#include <stdlib.h>
main()
{
	  
   int menu;
   char X;
   do{
		   printf("Digite a opcao:\n");
				   if (scanf("%d",&menu) == 0){
								printf("\nEntre com um inteiro!\n\n");							   
				   }
				   else
						  printf("\nVoce escolheu a opcao %d.\n\n", menu);
		   printf("você DESEJA FAZER MAIS ALGUMA COISA?(S)/(N)?\n\n");
		   scanf("%s",&X); 
	 }		 
	  while ((X=='S') || (X=='s'));
   system("pause");
}

enquanto eu digitar numeros ele vai ficar repetindo na boa... mas quando eu digito uma letra ele entra no if .. testa.. motra a msg de erro... mas segue o programa .. ou seja fica assim :

 

Imagem Postada

ou seja .. assim que eu digitasse a letra era pra ele voltar para a parte onde solicita a escolha.... mas ele não faz isso.

 

 

to meio q boiando hehe!

ql sua principal dúvida no momento?

descrevi as duas no primeiro post!!! ^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

para soh aceitar numeros faça assim:

#include <stdio.h>#include <ctype.h>int main(){	int num;	printf("Digite sua opcao: ");	scanf("%d", &num);	if (!(isdigit(num))) printf("Opcao Valida");	else printf("Opcao Invalidann");	getch();	return 0;}
eu naum entendo muito essa ctype.h pq pra mim ela tinha q dar opção valida se naum tivesse a negação, + td bem!

 

qnt ao tamanho da tela, veja isso:

http://forum.imasters.com.br/index.php?showtopic=270163

isso em C++, c você tiver o DevC++ ow algum similar tente atribuir valores para as variaveis de altura e comprimento para ver se resolve!

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara..acontesse a mesma coisa... do cógigo acima...

 

coloquei assim :

#include <stdio.h>#include <ctype.h>#include <stdlib.h>main(){	     int menu;   char X;   do{		   printf("Digite a opcao:n");		   scanf("%d",&menu);			   if (!(isdigit(menu)))						  printf("nEntre com um inteiro!nn");			   else						  printf("nVoce escolheu a opcao %d.nn", menu);		   printf("você DESEJA FAZER MAIS ALGUMA COISA?(S)/(N)?nn");		   scanf("%s",&X);	 }			  while ((X=='S') || (X=='s'));   system("pause");   return 0;}
e é a mesma coisa do outro... o problema está em usar essas funções ou parâmetros junto com um laço de repetição..

 

qnt ao tamanho da tela, veja isso:

http://forum.imasters.com.br/index.php?showtopic=270163

isso em C++, c você tiver o DevC++ ow algum similar tente atribuir valores para as variaveis de altura e comprimento para ver se resolve!

Não resolve não... tipo.. isso é em C++ .. não em C .. em C eu não posso usar isso... e outra... esse código ai só mostra a tamanho da tela.. e o que eu quero é fazer com que o .exe que eu gerar com a compilação do meu programa abra o console já com as cores e o tamanho que eu queria...

Compartilhar este post


Link para o post
Compartilhar em outros sites

nessa parte você inverteu:

if (!(isdigit(menu)))
						  printf("\nEntre com um inteiro!\n\n");
			   else
						  printf("\nVoce escolheu a opcao %d.\n\n", menu);
o certo seria:

if (isdigit(menu))
						  printf("\nEntre com um inteiro!\n\n");
			   else
						  printf("\nVoce escolheu a opcao %d.\n\n", menu);

Compartilhar este post


Link para o post
Compartilhar em outros sites

acontece a mesma coisa... sugiro você compilar o código sem o "!" ...para ver.. ou eu posso postar outro print..

 

detale . eu não inverti.. copiei do seu .. ^^" ..

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara to meio confuso:

você qr q se o cara digitar algo q naum seja numero de uma msg e peça o numero de novo, e c for numero caia no switch??

é simplesmente isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.