Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Entre para seguir isso  
LuisGCarv

C Mesmo erro em dois programas diferentes

Recommended Posts

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;        
    }

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

no scanf você tem q colocar o "&", exemplo scanf("%d", &num);

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exatamente como o @VictorFreitasKing mencionou, falou o & no scanf ficaria exatamente assim

 

    scanf ("%d",&num);
Porque ele está guardando no endereço de num, então precisa indicar isso com o uso do &

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

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;    
}

 

 

 

 

 

Editado por Benjamin Breeg
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • @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!

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    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

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 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.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    char c='b';
    int n = 10;
    switch (c){
    case 'a':
        //...
        break;
    case 'b':
        if(n == 10)printf("Igual");
        break;
    default:
        break;
    }

    Sim e sim!

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • @vangodp , eu estou tentando um switch com caracter, e tá dando uma falha.

     

    "[Error] switch quantity not an integer"

     

    como você acha que eu posso resolver isso?

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 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).

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

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

     

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 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 (); .

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário

    Entre para seguir isso  





    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×