Ir ao conteúdo
  • Cadastre-se

Estrutura de Repetição


Posts recomendados

Bom dia a todos, o proposito do meu codigo e simples,   ele vai pegar o nome de um funcionario e a nota que o funcionario ganhou.....   depois quero que ele imprima todos os nomes que foram digitados..   mas essa parte de imprimir os nomes n consigo fazer...  por que n consigo pegar os nomes que estão dentro do for...

#include <stdio.h>#include <stdlib.h>#include <string>void messagem(){     printf("\tObrigado, Volte Sempre!!");     printf("\n\n\n\n\n\n\n");}main(){       int i;       int a;       char funcionario[30];             for(i=0; i<4; i++){            printf("\n\t\t\tPesquisa de Satisfacao\n\n\n");           printf("Nome do Funcionario: ");           scanf("%s",&funcionario[i]);             printf("De uma nota de 0 a 10: ");           scanf("%i",&a);           printf("\n");           system("cls");       }       printf("\n\t\t\tFuncionarios Votados na Pesquisa\n");       messagem();       system("pause");     }
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@marcelo felipe_770680

 

Vetor de nomes precisa ter 2 posições, como matriz.

Pra mostrar os funcionários, só usar outro FOR.

#include <stdio.h>#include <stdlib.h>//#include <string.h>void messagem(){     printf("\tObrigado, Volte Sempre!!");     printf("\n\n\n\n\n\n\n");}main(){       int i;       int a;       char funcionario[4][30];             for(i=0; i<4; i++){            printf("\n\t\t\tPesquisa de Satisfacao\n\n\n");           printf("Nome do Funcionario: ");           scanf("%s",&funcionario[i]);             printf("De uma nota de 0 a 10: ");           scanf("%i",&a);           printf("\n");           system("cls");       }       printf("\n\t\t\tFuncionarios Votados na Pesquisa\n");       for(i=0; i<4; i++){                printf("%s \n", funcionario[i]);       }       system("pause");     }
Link para o comentário
Compartilhar em outros sites

ola  boa tarde,,,    obrigado...  deu certo..  mas me explica,  por que você colocou     (  char funcionario [4] [30]  )  ?? ...  

  

  eu entendo assim..   eu coloquei   char funcionario [30] por que  imaginei que por exemplo, se eu fosse digitar meu nome todo ]

   [marcelo felipe marques correa]  assim iria caber dentro dos [30] caracteres da variável  ......

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@marcelo felipe_770680

E como vai armazenas os dados dos 4 funcionários na mesma variável?

 

É como uma tabela. 4 linhas e 30 colunas. Cada linha armazena um funcionário e cada coluna um caractere. Agora tem que ver aí o tratamento do espaço. Aí ele corta e só mostra o primeiro nome. Não lembro como resolve.

Link para o comentário
Compartilhar em outros sites

Ola!

Para resolver a parte que captura as palavras bem como os espaços formando um nome ou frase com scanf, usamos o seguinte string de formatação: "%xx[^\n]"

 

xx é: o comprimento da palavra/ frase no caso char name[30] fica: "%29[^\n]"

No interior dos colchetes tem se ^\n isso que dizer que o scanf vai capturar caracteres até que(^) nova linha (\n)

entre pelo teclado.

 

 

Acho que isso resolve a parte de captura de frases ou nomes pessoais. 

Link para o comentário
Compartilhar em outros sites

Olá @marcelo felipe_770680

 

Aqui:

scanf("%s",&funcionario[i]); //>Desta maneira; A função não sabe a largura do strings e vai capturar até que encontre um caractere BRANCO (ESPAÇO, TAB, ou NOVA LINHA), ou seja, um palavra.

Para:

scanf("%29[^\n]", &funcionario[i]); //>A função scanf vai capturar strings até que pressione [/ENTER] ou o limite de 29 caracteres capturados.

Qualquer dúvida, questione.

Espero ter ajudado.

:)

Link para o comentário
Compartilhar em outros sites

Ola boa tarde ..   @dyR3X eu conseguir resolver o problema dos espaços no nome.. mas agora estou com outro problema...  

estou usando  switch case    tenho 2 cases  1-votar   2-relatório ... o primeiro esta funcionando consigo votar normal..  mas quando volto ao menu, e clico em 2-relatório..  me aparece isso:   https://www.dropbox.com/s/zfsmebvpihj1zt9/erro.JPG?dl=0   se nao der para ver o link....  esta aparacendo assim.. no relatório:

Funcionário :  |$#@&¨  ( em vez do nome aparece caracteres)

Nota:               32423    ( em vez da nota aparece Números aleatórios )       

#include <stdio.h>#include <stdlib.h>#include <string.h>#define TAM 3main(){              int opcao;       int i;       int a[10];       char funcionario[4][30];              printf("\n\t\t\tPesquisa de Satisfacao\n\n\n");       printf(" \t\t1 - Para votar\n");       printf(" \t\t2 - Para Relatorio\n");       printf("\t\tDigite:");       scanf("%i",&opcao);       system("cls");              switch(opcao){       case 1:       for(i=0; i<TAM; i++)       {            printf("\n\t\t\tPesquisa de Satisfacao\n\n\n");           printf("Nome do Funcionario: ");           fflush(stdin);           gets(funcionario[i]);            printf("De uma nota de 0 a 10: ");           scanf("%i",&a[i]);           printf("\n");           system("cls");       }       main();       break;                 case 2:       printf("\n\n\n\t\t\tFuncionarios Votados na Pesquisa\n\n");       for(i=0; i<TAM; i++)       {           printf("Funcionario: %s\n",funcionario[i]);           printf("Nota       : %i\n",a[i]);           printf("\n");       }       break;       default:       printf("\n\n\n\n\n\t\t\t\tOpção Invalida");       system("cls");       main();   }   system("pause>NULL");}
Link para o comentário
Compartilhar em outros sites

Oi @marcelo felipe_770680,

O que está acontecendo é que a cada vez que você chama a função main() uma nova instancia do programa e criada na memoria. Por fim, o relatório que é visualizado na imagem acima não correspondo ao primeiro programa no qual você inseriu os dados, e sim a uma nova instancia do programa main () na memória.

 

Você entendeu o caso, pergunte se restar dúvidas,

outra coisa, Qual é a sua intenção ao chamar main() dentro de si tantas vezes? Vou tentar adivinhar!

Segue abaixo uma versão com poucas alterações de seu código.

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <locale.h> //>Add local ou lingual do program#define TAM 1int Catch_Opcao(void);int main(void){    setlocale(LC_ALL, "Portuguese"); //>Para saída de caracteres acentuados na tela    int i      = 0;    int a[TAM] = { 0 };    char funcionario[TAM][30] = { {0}, };    for (; { //>Loop infinito, finaliza com comando 3 do menu.        system("cls");        switch(Catch_Opcao())        {        case 1:            for(i=0; i<TAM; i++)            {                printf("\n\t\t\tPesquisa de Satisfacao\n\n\n");                printf("Nome do Funcionario: ");                gets(funcionario[i]);                printf("De uma nota de 0 a 10: ");                scanf("%d", &a[i]);                while(getchar() != '\n');                printf("\n");                system("cls");            }            break;        case 2:            printf("\n\n\n\t\t\tFuncionarios Votados na Pesquisa\n\n");            for(i=0; i<TAM; i++)            {                printf("Funcionario: %s\n", funcionario[i]);                printf("Nota       : %i\n", a[i]);                printf("\n");            }            printf("Pressione para continuar...:");            getchar(); //>Pause!!!            break;        case 3:            printf ("Sair...\n");            system("PAUSE"); //>No windows DOS.            return 0;        default:            printf("\n\n\n\n\n\t\t\t\tOpção Invalida\n");            printf("Pressione para continuar...:");            getchar();            system("cls");        }    }return 0;}int Catch_Opcao(void){    int opcao = 0;    printf("\n\t\t\tPesquisa de Satisfacao\n\n\n");    printf(" \t\t1 - Para votar\n");    printf(" \t\t2 - Para Relatorio\n");    printf(" \t\t3 - Para sair\n");    printf("\t\tDigite: ");    scanf("%d",&opcao);    while(getchar() != '\n');    return opcao;}

Fique a vontade para fazer questionamento.

Até!

 

</dyR3X>

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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