Ir para o conteúdo
darkangel_13

Primeiro Programa

Mensagens Recomendadas

darkangel_13    0
darkangel_13

Após praticamente mais ou menos 6 semanas (ou menos) , já consigo impor estruturas de repetição, condicionais , e o básico ou seja compreender cada comando básico nas 3 linguagens :)  :(:P

e já tenho um programa próprio!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
darkangel_13    0
darkangel_13

ja tens um porgrama, porrreiro ... da para a gente ver ?

Sei que não é nada de especial :( mas para mim já é alguma coisa :P

#include <math.h>
#include <conio.h>
#include <stdio.h>
main()
{
      float pagamento_total,valor_imovel,taxa_juro,anos;
      char nome[30];
      char banco[30];
      printf("Digite o seu nome. :");
          scanf("%s%29[^\n]",nome);
          printf("\nDigite o nome do seu banco. :");
          scanf("%s%29[^\n]",banco);
          printf("\nDigite o valor do imovel. :");
          scanf("%f",&valor_imovel);
          printf("\nDigite a taxa de juro aplicada pelo banco. :");
          scanf("%f",&taxa_juro);
          printf("\nDigite o numero de anos acordado. :");
          scanf("%f",&anos);
          pagamento_total=valor_imovel*pow((1+(taxa_juro/100)),(anos)); //(1+(taxa_juro/100))^pow(numero_meses);
          printf("Nome = %s\n",nome);
          printf("Banco =%s\n ",banco);
          printf("Pagamento a realizar na totalidade =%f ",pagamento_total);
          getch();
     
     
     
     
     
      }

Serve para calcular a totalidade no fim dos anos que se pagou ao banco , com um certo numero de juros e anos :)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
apocsantos    210
apocsantos

    Boa noite,

    Partindo principio que estás a programar em Windows, porque não

system("pause");

em vez do

gets();

?

    O gets() deve ser evitado a todo o custo, porque cria uma vulnerabilidade no programa, permitindo que sejam inseridos mais bytes que o buffer permite, causando um buffer overflow. Em alternativa tens o

fgets (str, tamanho, stdin);

que te permite limitar o numero de bytes a serem inseridos.

    Agora o que gostarias tu de mudar no teu programa ?

Cordiais cumprimentos,

Apocsantos

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
darkangel_13    0
darkangel_13

é um começo ... so tenho uma pergunta :

porque o getch() final ?

Para a janela não fechar de imediato eu já tentei usar o system("PAUSE") só que não sei porque dava-me sempre um erro então enquanto não perceber o erro não o consigo usar

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
darkangel_13    0
darkangel_13

eu tenho outra pergunta: o que gostarias de mudar no teu programa?

Gostava de conseguir criar menus ,ou seja , ter varias hipóteses para o utilizador escolher

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
darkangel_13    0
darkangel_13

    Boa noite,

    Partindo principio que estás a programar em Windows, porque não

system("pause");

em vez do

gets();

?

    O gets() deve ser evitado a todo o custo, porque cria uma vulnerabilidade no programa, permitindo que sejam inseridos mais bytes que o buffer permite, causando um buffer overflow. Em alternativa tens o

fgets (str, tamanho, stdin);

que te permite limitar o numero de bytes a serem inseridos.

    Agora o que gostarias tu de mudar no teu programa ?

Cordiais cumprimentos,

Apocsantos

Gostava de poder criar menus , criar uma estrutura mais amigavel para o utilizador como já referi , como é que é possivel causar um buffer overflow se não existe no fim algo para inserir dados ?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pmg    102
pmg

Gostava de conseguir criar menus ,ou seja , ter varias hipóteses para o utilizador escolher

Eu estava mais a pensar em alterar o programa para que os valores introduzidos para nome e banco não fossem adulterados; isto é: o teu scanf continua mal

          scanf("%s%29[^\n]",nome);
          printf("Nome = %s\n",nome);

Este scanf requer dois parametros ("%s" e "%29[^\n]") e so lhe passas um parametro. Tudo pode acontecer; desde um crash a ele portar-se como esperado. O que eu esperava ao ver o código era ter a primeira palavra no nome e o resto ignorado, em vez disso, no meu computador o que foi ignorado foi a primeira palavra.

Para o input "Artur Alves Antunes" eu esperava um output de "Nome = Artur", mas deu-me "Nome = Alves Antunes" :/

Sugestão: escreve o scanf (tanto para o nome como para o banco) como

          scanf("%29[^\n] ",nome);

O espaço final vai fazer o ENTER ser "comido".


A maneira mais prática de fazer menus é com prints para mostrar as hipóteses e um ciclo do /* ... */ while(); para processar o input. Qualquer coisa como o código seguinte (não testado)

int ch; /* ch declarado como int para poder aceitar o valor de getchar() */
puts("1. opcao um");
puts("2. opcao dois");
puts("A. opcao a");
puts("Q. quit");
do {
    ch = getchar();
    switch (ch) {
        case '1': um(); break;
        case '2': dois(); break;
        case 'A': case 'a': fx_a(); break;
        case '\n': break; /* ignora ENTER */
        default: break; /* ignora tudo o resto */
    }
} while (ch != 'Q');

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
apocsantos    210
apocsantos

    Boa noite,

    O limite é o limite de memória disponível para armazenamento de bits causando crash, ou outro comportamento anomalo. A memória é gerida pelo Sistema Operativo e não é ilimitada.

Cordiais cumprimentos,

Apocsantos

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Deej    0
Deej
Para a janela não fechar de imediato eu já tentei usar o system("PAUSE") só que não sei porque dava-me sempre um erro então enquanto não perceber o erro não o consigo usar

Se o system pause te está a dar um erro tenta declarar a livraria stdlib (#include"stdlib.h").

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
apocsantos    210
apocsantos

    Bom dia

    Se for em windows precisas de incluir a biblioteca windows.h .

#include <windows.h>

Cordiais cumprimentos,

Apocsantos

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
EmySoares    1
EmySoares

Começar por reorganizar as instruções e devia começar por um programa simples e bem explicado.

float pagamento_total =0.0,valor_imovel,taxa_juro,anos;
char nome[30];
char banco[30];
int anos;


         printf("Digite o seu nome. :");
         gets(nome);

          printf("\nDigite o nome do seu banco. :");
          gets(banco);

          printf("Digite o valor do imovel. :\n");
          scanf("%f", &valor_imovel);

          printf("Digite a taxa de juro aplicada pelo banco :.\n");
          scanf("%f", &taxa_juro);

          printf("Digite o numero de anos acordado. :\n");
          scanf("%d",&anos);

          pagamento_total=valor_imovel*pow((1+(taxa_juro/100)),(anos));

          printf("Nome = %s\n",nome);
          printf("Banco =%s\n ",banco);
          printf("Pagamento a realizar na totalidade =%f.2 ",pagamento_total);
         // inves de :
          getch();

//por: 
system ("pause");

B)

   

   

   

   

   

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade