FórumGdH

Página Inicial do Guia do Hardware

Registrar FAQ Calendário Pesquisar Mensagens de Hoje Marcar Fóruns Como Lidos

Voltar   FórumGdH > Profissional > Programação, scripts, web e banco de dados
Bem-vindo ao FórumGdH
Não se esqueça de se registrar, é grátis . Nós temos 754.120 usuários, convidamos você fazer parte de nossa comunidade também! Se ainda não encontrou o que procura use nossa pesquisa. Esperamos que aprecie nosso trabalho.

Resposta
 
Opções do Tópico
Antigo 05-11-2005, 0:39   #1 (permalink)
Incógnito
General de Pijama
 
Avatar de Incógnito
 
Registrado em: Apr 2002
Localização: RJ - Capital
Mensagens: 3.159
Reputação: 24 Incógnito está indo no caminho certo
Padrão Dúvidas em C...

Estou com duas dúvidas que acredito serem bem básicas, mas não estou conseguindo saná-las...

Primeiro, sobre a expressão de controle: num determinado programa, foram colocados os números 7.2, ou seja: %7.2f. Não entendi a explicação do livro.. O quê significa o "7" e o "2"??

Segundo, como faço para um programa bem básico como o de baixo manter a tela do DOS aberta com a mensagem gerada e não fechar a tela depois da execução?


Código:
/* Um Primeiro Programa */ #include <stdio.h> main () { printf ("Ola! Eu estou vivo!"); }
__________________
_________________________________________________


_______________
Incógnito - RJ
Incógnito está offline   Responder com Quote
Antigo 06-11-2005, 2:00   #2 (permalink)
eumim
Super Participante
 
Avatar de eumim
 
Registrado em: Nov 2002
Localização: São João de Meriti RJ
Idade: 28
Mensagens: 931
Reputação: 321 eumim tem uma fabulosa reputaçãoeumim tem uma fabulosa reputaçãoeumim tem uma fabulosa reputaçãoeumim tem uma fabulosa reputaçãoeumim tem uma fabulosa reputaçãoeumim tem uma fabulosa reputaçãoeumim tem uma fabulosa reputaçãoeumim tem uma fabulosa reputaçãoeumim tem uma fabulosa reputaçãoeumim tem uma fabulosa reputaçãoeumim tem uma fabulosa reputação
Padrão

Sobre o %7.2f, se não me engano, ele indica que o número float a ser impresso deve ocupar 7 espaços, contando com a vírgula, com 2 casas decimais depois da vírgula.
Pra tela não fechar imediatamente, execute o programa no prompt ou coloque uma função tipo um getch no final do programa para que a janela só feche depois que pressionar uma tecla.
__________________
Desk: Gigabyte GA-MA69VM-S2 | AMD Athlon II X4 640 3.0@3.3 | 2GB DDR2 800@880 | MSI GeForce GTS 450 OC 512MB DDR5 | Samsung HD321HJ 320GB | Extream FEX-45T12 450W | LG L1753T 17''
Note:
HP G42-215BR | Core i3 350 | 3Gb DDR3 | HD 500GB
Fone: LG Optimus One P500
eumim está offline   Responder com Quote
Antigo 06-11-2005, 2:08   #3 (permalink)
Incógnito
General de Pijama
 
Avatar de Incógnito
 
Registrado em: Apr 2002
Localização: RJ - Capital
Mensagens: 3.159
Reputação: 24 Incógnito está indo no caminho certo
Padrão

Citação:
Postado Originalmente por eumim
Sobre o %7.2f, se não me engano, ele indica que o número float a ser impresso deve ocupar 7 espaços, contando com a v...
Eu estou executando no prompt, mas não adianta...
__________________
_________________________________________________


_______________
Incógnito - RJ
Incógnito está offline   Responder com Quote
Antigo 06-11-2005, 18:30   #4 (permalink)
peczenyj
GeeK
 
Avatar de peczenyj
 
Registrado em: Oct 2005
Localização: POA/RS -> RJ
Idade: 31
Mensagens: 2.982
Reputação: 28 peczenyj É esplêndido e chama muita atençãopeczenyj É esplêndido e chama muita atençãopeczenyj É esplêndido e chama muita atençãopeczenyj É esplêndido e chama muita atençãopeczenyj É esplêndido e chama muita atençãopeczenyj É esplêndido e chama muita atençãopeczenyj É esplêndido e chama muita atenção
Enviar mensagem via Skype para peczenyj
Padrão

Código:
/* Um Primeiro Programa */ #include <stdio.h> main () { char something; printf ("Ola! Eu estou vivo!"); scanf("%c",&something); }
__________________
NOVO BLOG:
http://pacman.blog.br/
peczenyj está offline   Responder com Quote
Antigo 06-11-2005, 19:07   #5 (permalink)
Incógnito
General de Pijama
 
Avatar de Incógnito
 
Registrado em: Apr 2002
Localização: RJ - Capital
Mensagens: 3.159
Reputação: 24 Incógnito está indo no caminho certo
Padrão

Citação:
Postado Originalmente por peczenyj
/* Um Primeiro Programa */
#include <stdio.h>
main ()
{
char something;
print...
Funcionou, obrigado...

Sabe dizer como ficaria o programa abaixo?

Código:
/* Adição de Números */ #include <stdio.h> int main(void) { int A, B, X; printf("Informe um valor para a variavel A: "); scanf("%d", &A); printf("Informe um valor para a variavel B: "); scanf("%d", &B); X = A + B; printf("\n O resultado equivale a: "); if (X >= 10) printf("%d", X + 5); else printf("%d", X - 7); return(0); }
__________________
_________________________________________________


_______________
Incógnito - RJ
Incógnito está offline   Responder com Quote
Antigo 06-11-2005, 19:37   #6 (permalink)
vini_bill
Super Participante
 
Registrado em: Jul 2004
Localização: Rio de Janeiro - Brasil
Mensagens: 593
Reputação: 16 vini_bill está indo no caminho certo
Enviar mensagem via ICQ para vini_bill Enviar mensagem via MSN para vini_bill
Padrão

Assumindo que A=1 e B=6:

Código:
x=1+6;
Logo x=7.
Código:
If x>=10
Como é falso o programa saltaria essas instrução e iria para o próximo e imprimiria:
Citação:
0
Por quê? Porque você ai imprimir você mandou X ser subtraido de 7. Como X era 7 ( 7-7=0 ) deu zero.

Como você está programando em windows, você pode usar a função getch() para "travar" o prompt. Assim você economiza memória pois não precisaria declarar uma variavel something a toa.

Quanto aos números não estranhe. Veja:

Código:
#include <stdio.h> main(){ const float pi=3.141521; printf("%7.2",pi); }
Percebeu que eu declarei uma variavel pi ( que clichê... )? Quando você rodar esse programa ele vai imprimir seis espaços vazios antes do 3 e apenas as duas primeiras casas decimais do pi. Algo assim:
Citação:
(...)3.14
nota: os pontos e os parenteses foram colocados apenas para que o fórum não colocasse o 3.14 colado no inicio da citação. Isso não deve acontecer quando você rodar o programa.

Teste ai e veja. Isso se chama saída formatada, ou seja... você sempre terá um número com 7 digitos inteiros e 2 casas decimais. SEMPRE. Sacou?

Outra dica. Como você ainda está usando um programa de apenas uma função troque o return (0) por exit(0). Segundo o livro que eu tô lendo isso vai limpar completamente a memória assim que o programa sair, coisa que o return(0) não faria já que ele só está indicando ao sistema operacional sucesso e não que ele terminou completamente. Logicamente que se o seu sistema operacional entender um programa como um processo o return(0) e o exit vão ter o mesmo sentido. Ainda estou estudando sistema operacionais mas pelo o que entendi no minix a banda não toca bem assim pois ele gera processos filhos que ao terminarem continuam existindo apenas ficando "parados".

Pessoal também estou com duvidas. No meu caso são sobre matrizes. Vejam:

Código:
#include <stdio.h> #include <string.h> static int lero[10][20]; int main(){ int content=0; int linha,coluna; //Acessa linha por linha e adiciona um valor para cada célula for (linha=0;linha<=10;++linha){ for (coluna=0;coluna<=20;++coluna){ lero[linha][coluna]=content++; } } for (linha=0;linha<=10;++linha){ for (coluna=0;coluna<=20;++coluna) printf("%3d\n",lero[linha][coluna]); } return(0); }
e a saída tem sido:
Citação:
bash-3.00$ ./string
0
1
2
3
(...)
208
210
210
211
(...)
229
230
bash-3.00$
Algumas perguntas: Não era para ser impresso de 0 à 199? Por que o 210 repete? Por que só 210?

Por que trocando os simbolos de <= por apenas < dá certo?

... Vinicius Menezes ...
__________________
Monitor: TV Samsumg 32''
Processador: AMD Semprom 3000+
Memória: DDR2 2GB 667mhz
Video: GeForce 8400
Som: OnBoard
HD: Samsung 250GB
vini_bill está offline   Responder com Quote
Antigo 06-11-2005, 19:48   #7 (permalink)
peczenyj
GeeK
 
Avatar de peczenyj
 
Registrado em: Oct 2005
Localização: POA/RS -> RJ
Idade: 31
Mensagens: 2.982
Reputação: 28 peczenyj É esplêndido e chama muita atençãopeczenyj É esplêndido e chama muita atençãopeczenyj É esplêndido e chama muita atençãopeczenyj É esplêndido e chama muita atençãopeczenyj É esplêndido e chama muita atençãopeczenyj É esplêndido e chama muita atençãopeczenyj É esplêndido e chama muita atenção
Enviar mensagem via Skype para peczenyj
Padrão

vc faz um for assim

for(inicio; condição ; incremento)

se vc tem uma matriz de tamanho 20, ela vai de 0 a 19, por isso vc faz um contador que começa em 0 e incrementa enquanto é menor que 20. se vc usa <= vc vai pegar o elemento 20 de uma matriz que vai até 19 e isso não presta.
__________________
NOVO BLOG:
http://pacman.blog.br/
peczenyj está offline   Responder com Quote
Antigo 06-11-2005, 19:50   #8 (permalink)
Incógnito
General de Pijama
 
Avatar de Incógnito
 
Registrado em: Apr 2002
Localização: RJ - Capital
Mensagens: 3.159
Reputação: 24 Incógnito está indo no caminho certo
Padrão

Citação:
Postado Originalmente por vini_bill
Como você está programando em windows, você pode usar a função getch() para "travar" o prompt. Assim você economiza memória pois não precisaria declarar uma variavel something a toa.
Valeu. O algoritmo do programa eu entendi, a minha dúvida é sobre como travar o prompt nesse programa também. Onde coloco essa função getch()?
__________________
_________________________________________________


_______________
Incógnito - RJ
Incógnito está offline   Responder com Quote
Antigo 06-11-2005, 20:10   #9 (permalink)
peczenyj
GeeK
 
Avatar de peczenyj
 
Registrado em: Oct 2005
Localização: POA/RS -> RJ
Idade: 31
Mensagens: 2.982
Reputação: 28 peczenyj É esplêndido e chama muita atençãopeczenyj É esplêndido e chama muita atençãopeczenyj É esplêndido e chama muita atençãopeczenyj É esplêndido e chama muita atençãopeczenyj É esplêndido e chama muita atençãopeczenyj É esplêndido e chama muita atençãopeczenyj É esplêndido e chama muita atenção
Enviar mensagem via Skype para peczenyj
Padrão

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

main()
{
char c;
printf("Pressione uma tecla...");
ch = getch();
printf("Voce pressionou a tecla %c", ch);
}
__________________
NOVO BLOG:
http://pacman.blog.br/
peczenyj está offline   Responder com Quote
Antigo 06-11-2005, 21:33   #10 (permalink)
Incógnito
General de Pijama
 
Avatar de Incógnito
 
Registrado em: Apr 2002
Localização: RJ - Capital
Mensagens: 3.159
Reputação: 24 Incógnito está indo no caminho certo
Padrão

No primeiro programa funciona...

Código:
/* Adição de Números */ #include <stdio.h> main () { int A, B, X; printf("Informe um valor para a variavel A: "); scanf("%d", &A); printf("Informe um valor para a variavel B: "); scanf("%d", &B); X = A + B; printf("\n O resultado equivale a: "); if (X >= 10) printf("%d", X + 5); else printf("%d", X - 7); getch(); }


... No segundo não rolou....


Código:
/*Cálculo de Salário*/ #include <stdio.h> main () { float HT, VH, PD, TD, SB, SL; printf("Quantas horas de trabalho? "); scanf("%f", &HT); printf("Qual o valor da hora? "); scanf("%f", &VH); printf("Qual o percentual de dsconto? "); scanf("%f", &PD); SB = HT * VH; TD = (PD/100) * SB; SL = SB - TD; printf("Salario Bruto ...: %7.2f\n", SB); printf("Desconto ........: %7.2f\n", TD); printf("Salario liquido .: %7.2f\n", SL); getch(); }
Porquê? Porquê??? :cry: :cry:
__________________
_________________________________________________


_______________
Incógnito - RJ
Incógnito está offline   Responder com Quote
Antigo 06-11-2005, 22:10   #11 (permalink)
peczenyj
GeeK
 
Avatar de peczenyj
 
Registrado em: Oct 2005
Localização: POA/RS -> RJ
Idade: 31
Mensagens: 2.982
Reputação: 28 peczenyj É esplêndido e chama muita atençãopeczenyj É esplêndido e chama muita atençãopeczenyj É esplêndido e chama muita atençãopeczenyj É esplêndido e chama muita atençãopeczenyj É esplêndido e chama muita atençãopeczenyj É esplêndido e chama muita atençãopeczenyj É esplêndido e chama muita atenção
Enviar mensagem via Skype para peczenyj
Padrão

use scanf e seja feliz
__________________
NOVO BLOG:
http://pacman.blog.br/
peczenyj está offline   Responder com Quote
Antigo 06-11-2005, 22:21   #12 (permalink)
vini_bill
Super Participante
 
Registrado em: Jul 2004
Localização: Rio de Janeiro - Brasil
Mensagens: 593
Reputação: 16 vini_bill está indo no caminho certo
Enviar mensagem via ICQ para vini_bill Enviar mensagem via MSN para vini_bill
Padrão

Siga o conselho do amigo. O scanf tem uma sintaxe maior mas realmente vai te salvar a vida muitas vezes já que é uma função padrão C e diferentemente do getch.

Qual compilador você tá usando? O borland C?

... Vinicius Menezes ...
__________________
Monitor: TV Samsumg 32''
Processador: AMD Semprom 3000+
Memória: DDR2 2GB 667mhz
Video: GeForce 8400
Som: OnBoard
HD: Samsung 250GB
vini_bill está offline   Responder com Quote
Antigo 06-11-2005, 22:22   #13 (permalink)
Gabrielvinicios
General de Pijama
 
Registrado em: Nov 2001
Localização: Pouso Alegre/MG 37.550-000
Mensagens: 3.885
Reputação: 25 Gabrielvinicios está indo no caminho certo
Enviar mensagem via ICQ para Gabrielvinicios Enviar mensagem via MSN para Gabrielvinicios
Padrão

Aqui o segundo funcionou 100%.
Lembre-se que para que a função getch() possa funcionar, vc deve ativar o cabeçalho conio.h, no inicio do programa.

#include <conio.h>

Valeu.
__________________
Gabriel vinicios
Gabrielvinicios está offline   Responder com Quote
Antigo 06-11-2005, 22:23   #14 (permalink)
Incógnito
General de Pijama
 
Avatar de Incógnito
 
Registrado em: Apr 2002
Localização: RJ - Capital
Mensagens: 3.159
Reputação: 24 Incógnito está indo no caminho certo
Padrão

Acho que não fui claro, desculpe... Não é o "if" que não está funcionando... É o getch()...
__________________
_________________________________________________


_______________
Incógnito - RJ
Incógnito está offline   Responder com Quote
Antigo 06-11-2005, 22:33   #15 (permalink)
Incógnito
General de Pijama
 
Avatar de Incógnito
 
Registrado em: Apr 2002
Localização: RJ - Capital
Mensagens: 3.159
Reputação: 24 Incógnito está indo no caminho certo
Padrão

Citação:
Postado Originalmente por Gabrielvinicios
Aqui o segundo funcionou 100%.
Lembre-se que para que a função getch() possa funcionar, vc deve ativar o cabeçalho c...
Realmente é o <conio.h>...

Só que cheguei a testar o primeiro programa sem ele(tirei de propósito para testar) e funcionou... Muito estranho... Será que era porque ele já estava carregado??

Mas valeu mesmo!!! Agora os dois funcionaram!!!! :mrgreen:
__________________
_________________________________________________


_______________
Incógnito - RJ
Incógnito está offline   Responder com Quote
Antigo 07-11-2005, 7:22   #16 (permalink)
rtardelli
Newbie
 
Registrado em: Sep 2005
Mensagens: 35
Reputação: 0 rtardelli está indo no caminho certo
Padrão

Em vez de usar o getch() vc pode usar o system("pause") que também funciona.
__________________
Vlw

Tardelli
rtardelli está offline   Responder com Quote
Antigo 07-11-2005, 13:58   #17 (permalink)
Incógnito
General de Pijama
 
Avatar de Incógnito
 
Registrado em: Apr 2002
Localização: RJ - Capital
Mensagens: 3.159
Reputação: 24 Incógnito está indo no caminho certo
Padrão

Citação:
Postado Originalmente por rtardelli
Em vez de usar o getch() vc pode usar o system("pause") que também funciona.
Com system ("pause") não funfou..
__________________
_________________________________________________


_______________
Incógnito - RJ
Incógnito está offline   Responder com Quote
Antigo 07-11-2005, 14:06   #18 (permalink)
peczenyj
GeeK
 
Avatar de peczenyj
 
Registrado em: Oct 2005
Localização: POA/RS -> RJ
Idade: 31
Mensagens: 2.982
Reputação: 28 peczenyj É esplêndido e chama muita atençãopeczenyj É esplêndido e chama muita atençãopeczenyj É esplêndido e chama muita atençãopeczenyj É esplêndido e chama muita atençãopeczenyj É esplêndido e chama muita atençãopeczenyj É esplêndido e chama muita atençãopeczenyj É esplêndido e chama muita atenção
Enviar mensagem via Skype para peczenyj
Padrão

Que tal executar pelo prompt de comando do DOS ?
__________________
NOVO BLOG:
http://pacman.blog.br/
peczenyj está offline   Responder com Quote
Antigo 07-11-2005, 15:29   #19 (permalink)
EXCEED
Membro Senior
 
Avatar de EXCEED
 
Registrado em: Aug 2005
Localização: São Paulo - SP
Mensagens: 388
Reputação: 14 EXCEED possui ótimo potencial
Enviar mensagem via MSN para EXCEED
Padrão

Citação:
Postado Originalmente por Incógnito
Com system ("pause") não funfou..
Coloque um ; (ponto e vígula) que funciona system("PAUSE");
EXCEED está offline   Responder com Quote
Antigo 07-11-2005, 15:40   #20 (permalink)
jqueiroz
Highlander
 
Avatar de jqueiroz
 
Registrado em: May 2002
Localização: Tijuca/RJ
Idade: 9
Mensagens: 87.724
Reputação: 778 jqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputação
Padrão

O getch() às vezes não funciona porque você faz um scanf() antes.

Ambos, getch() e scanf(), trabalham com o stream INPUT. Quando você usa scanf(), ela lê todos os caracteres até encontrar um separador. Esse separador não é lido, continua no stream. Detalhe: o "ENTER" é considerado um separador.

Daí, quando você executa o getch() logo após o scanf(), o ENTER que estava no stream é lido, e getch() retorna sem esperar. Para isso não acontecer, você tem que usar a função fflush() para limpar tudo que esteja nos buffers de leitura do stream INPUT, fazendo com que o getch() em seguida espere que mais alguma coisa seja digitada.

Código:
fflush(stdin); getch();
__________________
Visite Quepolis (link de indicação) | "chmod 777 nunca ajudou ninguém" (c) 2002-2010 JQueiroz/FGdH
CCNP: √ ² CCSI: □ | Conheça o Novo Bebuns
jqueiroz está offline   Responder com Quote
Resposta


Opções do Tópico

Regras de Mensagens
Você não pode criar tópicos
Você não pode postar respostas
Você não pode anexar arquivos
Você não pode editar suas mensagens

Código vB está Ligado
Smiles estão Ligado
Código [IMG] está Ligado
Código HTML está Desligado
Ir para...


Horários baseados na GMT -3. Agora são 15:01.