Ir ao conteúdo

Posts recomendados

Postado

Sou iniciante na linguagem C e estou passando por uns maus bocados no momento que os meus programas entram em uma estrutura condicional ou laço de repetição.

O programa para de funcionar e vem aquela mensagem chata que o windows sempre dá quando encontra um erro, mas até agora eu não consegui identificar onde está o erro.

São programas simples, porque eu estou revendo apenas alguns conceitos que já aprendi. Precisa urgentemente da ajuda de vocês, porque estarei realizando provas nesse fim de semana e esses conceitos com certeza irão cair!

 

O erro só aparece nesse programa quando eu digito o segundo número do laço:

 

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <cstdlib>

int main (void)
{
    int num[5];
    int soma = 0;

    setlocale (LC_ALL, "portuguese");
    for (int i= 0; i <= 4 ; i++ )
    {
        printf ("\nDigite o %d ° número = ", i+1);
        scanf ("%d",num);
    }

    for (int i=0;i<=4;i++)
    {
        soma += num;
    }

    printf ("A soma dos 5 números é %d", soma);
    system ("pause");    
    return 0;    
}

 

Esse é mais complicado e dá erro logo que eu digito o número

 

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

int main (void)
{
    int c, num;

    setlocale(LC_ALL, "Portuguese");
    printf ("Digite um número = ");
    scanf ("%d",num);
    int cont = 1;

    for (c=2;c<=num;c++)
    {
         if (num % c != 0)
         {
               cont ++;
               if (cont == num)
              {         
                   printf ("\n%d é um número primo", num);
            }
        }
          else
          {        
              printf ("\nO número %d é múltiplo de %d", num , c);
              break;    
          }
        
    }    

    if (num % 2 == 1)
    {
        printf ("\nO número %d é impar!",num);    
    }    
    else
    {
        printf ("\nO número %d é par!",num);    
    }
    
    system ("pause");        
    return 0;        
    }

 

Postado

No primeiro programa:

 

cstdlib  - cabeçalhos sem o .h são usados pelo c++

 

Você criou um array de 5 elementos e nao usou os índices na entrada e nos loop for:  num

 

Int i =  0 é sintaxe do c89 se não me engano, criar a variável dentro do for so a partir do c99, no 89 você tem que criar a variável fora do for:

 

int i;

for (i= 0; i <= 4 ; i++ )

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <stdlib.h>

int main (void)
{
    int num[5];
    int soma = 0;
    int i;

    setlocale (LC_ALL, "portuguese");
    for (i= 0; i <= 4 ; i++ )
    {
        printf ("\nDigite o %d° número : ", i+1);
        scanf ("%d", &num[i]);
    }

    for (i=0;i<=4;i++)
    {
        soma += num[i];
    }

    printf ("A soma dos 5 números é %d\n", soma);
    system ("pause");    
    return 0;    
}

 

 

 

 

 

  • Curtir 1
Postado
1 hora atrás, LuisGCarv disse:

@VictorFreitasKing  e @erique , obrigado pelo esclarecimento .

Eu não acredito que esqueci esse conceito, já estou estudando ponteiros e já tinha aprendido que & direcionava ao endereço da variável.

@Benjamin Breeg , eu ainda não conhecia essas regras, muito obrigado pelas dicas!

 

uma dica, se dedica em ponteiros, quando você for estudar estruturas de dados é o que mais vai confundir...

  • Obrigado 1
Postado
9 horas atrás, VictorFreitasKing disse:

 

uma dica, se dedica em ponteiros, quando você for estudar estruturas de dados é o que mais vai confundir...

Valeu pela dica!

Uma dúvida que estou tendo é se tem como colocar um char pra definir as opções do switch/case.

E se é possível colocar um if/else dentro de um switch/case.

  • mês depois...
Postado
5 horas atrás, vangodp disse:

pegue aqui seu código para averiguar

o codigo é um pouco grande e eu percebi que coloquei um case dentro de outro, será que pode ser isso?

 

aqui a parte do código até o primeiro case.

int controlepag(void)
{
struct controle pagamento[100];
int a, b, c, fim, op, horas;
char o[5];

do 
{
printf ("Escolha uma opção \n");
printf ("\n");
printf ("1) Cadastrar um funcionário \n");
printf ("2) Verificar o cadastro de um funcionário \n");
printf ("3) Voltar ao menu anterior \n");
printf ("4) Encerrar o processo \n");
scanf ("%d",&op);
system ("cls");
switch(op)
{
case 1: 
	pagamento[a].codigo = a + 2001;
    printf ("Digite o nome do funcionário : \n");
    scanf (pagamento[a].nome);
    printf ("O código do funcionário é %d \n", pagamento[a].codigo);
    system ("pause");
    system ("cls");
    strcpy (o,"A");
    while (o!="D") 
	{
        printf ("Selecione um serviço que o funcionário realizou : \n");
        printf ("A) 1M \n");
        printf ("B) 2S \n");
        printf ("C) 3F \n");
        printf ("D) Encerrar cálculo de salário \n");
        scanf ("%s",&o);
        system ("cls");
        switch (o)
        {
        case "A" :
            printf ("Quantas horas o funcionário trabalhou nesse setor : \n");
            scanf ("%d",&horas);
            pagamento[a].salario += horas * 100;
            break;
        case "B" :
            printf ("Quantas horas o funcionário trabalhou nesse setor : \n");
            scanf ("%d",&horas);
            pagamento[a].salario += horas * 200;
            break;
        case "C" :
            printf ("Quantas horas o funcionário trabalhou nesse setor : \n");
            scanf ("%d",&horas);
            pagamento[a].salario += horas * 300;
            break;
        case "D" :
            printf ("Cálculo encerrado! \n");
            printf ("\n");
            system ("pause");
        	system ("cls");
            break;
        default :
            printf ("Opção inválida! Tente novamente. \n");
            printf ("\n");
            system ("pause");
        	system ("cls");
            break;
        }
		}    
        a += 1;        
        break;

O problema aparece no switch (o).

Postado
Em 30/10/2017 às 09:56, vangodp disse:

"A" é uma string e 'A' é um char. O case não funciona com strings somente com tipos básicos como int, chars, floats etc, fazer case "A": é errado, deveria ser case 'A':, com aspas simples.

scanf (pagamento[a].nome); deveria ser scanf ("%s", pagamento[a].nome); si se trata de uma string.

 

Em C não é permitido comparar strings diretamente, é preciso usar strcmp em while (o!="D") mas suponho que se trata de um erro e o deve ser um char e não uma string.

Em fim... são varios erros, repasse tudo o que aprendeu sobre chars, strings, e literais em C.

 

Eu acho que já consegui arrumar tudo. Como o case não aceita strings, quando eu digitava enter, estava entrando na opção de default, mas eu consegui resolver isso com alguns getchar (); .

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...