Ir ao conteúdo
  • Cadastre-se

jpaulofsa

Membro Pleno
  • Posts

    43
  • Cadastrado em

  • Última visita

posts postados por jpaulofsa

  1. #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
    	FILE *p;
    	char nome[27], idade[5], arq_nome[30];
    	char c;
    	
    	printf("\nArquivo de entrada: ");
    	gets(arq_nome);
    	
    	if ((p = fopen(arq_nome, "r")) == NULL)
    	{
    		printf("\nErro ao abrir o arquivo %s!", arq_nome);
    		exit(1);
    	}
    	
    	printf("\nImprimindo dados do arquivo: %s\n", arq_nome);
    	while (!feof(p)) //enquanto não encontra o fim do arquivo
    	{
    		c = 0;
    		//Leitura sincronizada..
    		fscanf(p, "%s", nome); //salta a palavra: 'nome:'
    		fgets(nome, 27, p);	
    		fscanf(p, "%s", idade); //salta a palavra: 'idade:'
    		fgets(idade, 5, p);
    		printf("\nNome: %s\nIdade: %s", nome, idade);
    		
    		/*Caso alguma parte se perca, e o ponteiro no arquivo fique parado
    		em alguma parte do registro, esta rotina fara a sincronizacao.*/
    		while(c != '$')
    		{
    			c = getc(p);
    			if (feof(p)) break;	
    		} 
    	}
    	fclose(p); //fecha o arquivo
    }

    Bom dia, pessoal. Preciso criar um programa que leia uma lista de nomes e idades de um arquivo
    texto. alguém poderia me ajudar em que estou errando? Preciso que imprima uma lista, mas só está imprimindo o primeiro nome e a primeira idade...

    • Curtir 1
  2. @devair1010 Muito obrigado, mas agora tem coisas avançadas que não vi ainda.

    9 horas atrás, devair1010 disse:

    @jpaulofsa   você poderia colocar assim  :

    
    #include <stdio.h>
    #include <time.h>
    #include <windows.h>
    #include <stdlib.h>
    /*             0     1    2     3   4      5      6      7         8  */
    typedef enum{BLACK,BLUE,GREEN,CYAN,RED,MAGENTA,BROWN,LIGHTGRAY,DARKGRAY,   /* nome das cores */
    LIGHTBLUE,LIGHTGREEN,LIGHTCYAN,LIGHTRED,LIGHTMAGENTA,YELLOW,WHITE} COLORS;
    /*  9         10         11        12        13         14    15 */
    
    static int __BACKGROUND = 1/*BLACK*/;/*pode ser o numero ou o nome da cor*/
    static int __FOREGROUND = LIGHTGRAY;
    
    void textcolor_2 (int letra, int fundo){/*para mudar a cor de fundo mude o background*/
        __FOREGROUND = letra;
        __BACKGROUND = fundo;
        SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),
        letra + (__BACKGROUND << 4));
    }
                      /* y = linha de 0 a 24 , x = coluna de 0 a 80 */
    void gotoxy_2(int x, int y){/*imprimir na linha e coluna desejada */
      COORD c;
      c.X = x;
      c.Y = y;
      SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c);
    }
    void som(int f){
        Beep(f,150);/* primeiro a frquência depois o tempo de duração do som */
    }
    int sm[10]={800,2200,2200,2200,800,2200,800,2200,800,2200};
    int main()
    {
        srand(time(NULL));
    	int num[10]; //Declara um vetor de inteiros de 10 posições
    	int count = 0;
    	int totalnums,j,i,aux;
        textcolor_2(12,14);
        system("cls");
    	do
    	{
    		printf ("\nEntre com um numero (-999 p/ terminar): ");
    		scanf("%d", &num[count]);
    		count++;
    	} while (num[count-1]!=-999 && count < 10) ;/* count eh a quantidade de numeros */
                                                    /* repete se os dois forem verdadeiros */
    	totalnums=count;/* eh count mesmo pois vai ate enquanto for menor que count */
    
        for(j=0;j<count-1;j++)
            for(i=j+1;i<count;i++)
                if( num[j] > num[i]){
                    aux    = num[j];
                    num[j] = num[i];
                    num[i] = aux   ;
                }
    	printf("\n\n\n\t Em Ordem Crescente , Os N%cmeros Que Voc%c Digitou Foram: \n\n",233,136);
    
    	int px,Lin;                               /* variáveis simples                       */
        HANDLE hOut;                              /* controle dos dispositivos do pc         */
        hOut= GetStdHandle(STD_OUTPUT_HANDLE);    /* pega a saída padrão                     */
        CONSOLE_SCREEN_BUFFER_INFO SBInfo;        /* informações sobre a buffer da tela      */
        GetConsoleScreenBufferInfo(hOut, &SBInfo);/* pega a posição do cursor do console     */
        px = SBInfo.dwCursorPosition.X;           /* pX será a posição da coluna do cursor no console */
        Lin= SBInfo.dwCursorPosition.Y;           /* pY será a posição da linha do cursor no console  */
    
        gotoxy_2(8,Lin);
    
    	for (count=0; count<totalnums; count++){
            aux=rand()%15;
            if(aux==14 || aux==11)aux=rand()%15;
            textcolor_2(aux,14);
    		printf(" %d", num[count]);
    		som(sm[count]);
    	}
        for(j=0;j<5;j++)
            printf("\n");
        textcolor_2(7,14);
    	return(0);
    }

     

     

    • Curtir 1
  3. #include <stdio.h>
    
    int main()
    {
    	int num[10]; //Declara um vetor de inteiros de 10 posições
    	int count = 0;
    	int totalnums;
    	
    	do
    	{
    		printf ("\nEntre com um numero (-999 p/ terminar): ");
    		scanf("%d", &num[count]);
    		count++;
    	} while (num[count-1]!=-999 || (num[count] < 11)) ;
    	
    	totalnums=count-1;
    	
    	printf("\n\n\n\t Os numeros que voce digitou foram: \n\n");
    	
    	for (count=0; count<totalnums; count++)
    		printf(" %d", num[count]);
    	return(0);	
    }

    Boa noite, pessoal. Preciso fazer com que o loop seja interrompido caso o usuário entre com 10 números ou caso o Flag (-999) seja digitado, pensei em inserir a condição || (num[count] < 11) dentro do while, mas não deu certo. Alguém poderia ajudar? desde já agradeço.

    • Obrigado 1
  4. @AnsiC  Ótimo. muito obrigado.

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void)
    {
    	int index = 0, contador;
    	char letras[5] = "Joao";
    	
    	/* Através do comando if e do operador % testar se o contador é divisível
    	por 5 para fazer com que cada letra seja escrita 5 vezes seguidas
    	antes de atualizar o index */
    	for (contador=0; contador<1000; contador++)
    	{
    		{
    			printf("\n %c", letras[index]);
    			if (index==3)
    			{
    				index=0;
    			}
    			else
    			{
    				if (contador % 5 == 0)
    				{
    					++index;	
    				} 	
    			}
    		}
    	}
    	printf("\n\n");
    	system("pause");
    	return 0;
    }

    Mas eu precisaria que estas letras se repetissem obedecendo ao contador < 1000...teria como ou só da forma que você fez mesmo? do jeito que fiz aí tem letras que repetem 1 vez, outras às 5 vezes...

  5. #include <stdio.h>
    
    int main()
    {
    	int index = 0, contador;
    	char letras[5] = "Joao";
    	
    	/* Através do comando if e do operador % testar se o contador é divisível por 5 para fazer com que cada letra seja escrita 5 vezes seguidas antes de atualizar o index */
    	for (contador=0; contador<1000; contador++)
    	{
    		{
    			//if (letras[index] % 5 == 0)
    			
    			printf("\n%c", letras[index]);
    			if (index==3)
    			{
    				index=0;
    			}
    			else
    			{
    				if (letras[index] % 5 == 0)
    				{
    					++index;	
    				} 	
    			}
    		}
    	}
    }

    Bom dia, pessoal.

     

    Preciso da ajuda de vocês. Gostaria, Através do comando if e do operador %, de testar se o contador é divisível por 5 para fazer com que cada letra seja escrita 5 vezes seguidas antes de atualizar o index. Alguém conseguiria me auxiliar, tentei algumas formas inclusive da forma acima, mas não está dando certo. 

  6. #include <stdio.h>
    
    int main()
    {
    	int cont;
    	for (cont = 0; cont < 256; cont++)
    	{
    		printf("%d = %c \n", cont, cont);
     	}
    }

    Fala turma. Preciso de um código que pegue os números de 0 a 255 e imprima o código ASCII correspondente. Pensei da forma acima, mas o problema é que ele esta começando a imprimir do 108 até o 255, não sei o porque tá ignorando do 0 ao 107. Alguém poderia ajudar?

  7. 1 hora atrás, AnsiC disse:

    Olá!

    Com relação a essa função, falta apenas os parâmetros. Entre em contato com autor do programa e peça-lhe mais esclarecimentos. Caso não consiga essa função faz mais sentido desta maneira:

    
    //Função que adiciona os números pares no início da lista e os números ímpares no 
    //final da lista
    void inserir(Lista* lista, int valor){
      /* A função inserir tem duas outras internas a ela
      
            see:: inserirInicio
            see:: inserirFinal
            
            As duas funções internas exigem igualmente dois parâmetros
               ::lista : parametro do tipo Lista.
               ::valor : parametro do tipo int.
      */
      if((valor % 2) == 0){inserirInicio(lista, valor);}
      else{inserirFinal(lista, valor);}
      return;}

    Você entendeu isso?

    O.k!

    #include <stdio.h>
    #include <stdlib.h>
    
    struct tipo_no {
        int dado;
        struct tipo_no * proximo;
    };
    
    typedef struct tipo_no No;
    
    struct tipo_lista{
         No *primeiro;
         No *ultimo;
    };
    
    typedef struct tipo_lista Lista;  
    
    void criarLista(Lista* lista){
      lista->primeiro = NULL;
      lista->ultimo=NULL;   
    }
    
    int listaVazia(Lista* lista){
       if ((lista->primeiro == NULL) || (lista->ultimo==NULL)) return 1;
       else return 0;
    }
    
    void inserirFinal(Lista* lista,int valor){
      No *novo;   
      novo = (No*)malloc(sizeof(No));
      novo->dado = valor;
      novo->proximo=NULL;
      if(listaVazia(lista)==1){
        lista->primeiro = novo;                       
      }else{
         (lista->ultimo)->proximo = novo;    
      }                                 
      lista->ultimo = novo;     
    }
    
    void inserirInicio(Lista* lista,int valor){
      No *novo;   
      novo = (No*)malloc(sizeof(No));
      novo->dado = valor;
      novo->proximo=NULL;
      if(listaVazia(lista)==1){
        lista->ultimo = novo;                       
      }else{
         novo->proximo = lista->primeiro;    
      }                                 
      lista->primeiro = novo;     
    } 
    //Função que adiciona os números pares no início da lista e os números ímpares no final da lista
    void inserir(Lista* lista, int valor){
    	if((valor % 2) == 0){
    		inserirInicio(lista, valor);
    	} else {
    		inserirFinal(lista, valor);
    	}
    }
    
    void listar(Lista* lista){
       No* ponteiro = lista->primeiro;
       while(ponteiro!= NULL){
           printf("%d ",ponteiro->dado);             
           ponteiro = ponteiro->proximo;              
       }   
       printf("\n");
    }
    
    int main(int argc, char *argv[]){
      Lista* lista = (Lista*) malloc(sizeof (Lista));   
      criarLista(lista);
      int op=0,valor;
      do{
        system("cls");  
        printf("\n1-Inserir Numero\n2-Listar\n3-Sair\n");
        scanf("%d",&op);
        switch(op){
           case 1:printf("\nInforme o Valor:");
                  scanf("%d",&valor);
                  inserir(lista,valor);
                  break;
           case 2:system("cls");
                  listar(lista);                
                  system("PAUSE");	
        }  
      }while(op != 3);     
      system("PAUSE");	
      return 0;
    }

    Muito obrigado.

  8. #include <stdio.h>
    #include <stdlib.h>
    
    struct tipo_no {
        int dado;
        struct tipo_no * proximo;
    };
    
    typedef struct tipo_no No;
    
    struct tipo_lista{
         No *primeiro;
         No *ultimo;
    };
    
    typedef struct tipo_lista Lista;  
    
    void criarLista(Lista* lista){
      lista->primeiro = NULL;
      lista->ultimo=NULL;   
    }
    
    int listaVazia(Lista* lista){
       if ((lista->primeiro == NULL) || (lista->ultimo==NULL)) return 1;
       else return 0;
    }
    
    void inserirFinal(Lista* lista,int valor){
      No *novo;   
      novo = (No*)malloc(sizeof(No));
      novo->dado = valor;
      novo->proximo=NULL;
      if(listaVazia(lista)==1){
        lista->primeiro = novo;                       
      }else{
         (lista->ultimo)->proximo = novo;    
      }                                 
      lista->ultimo = novo;     
    }
    
    void inserirInicio(Lista* lista,int valor){
      No *novo;   
      novo = (No*)malloc(sizeof(No));
      novo->dado = valor;
      novo->proximo=NULL;
      if(listaVazia(lista)==1){
        lista->ultimo = novo;                       
      }else{
         novo->proximo = lista->primeiro;    
      }                                 
      lista->primeiro = novo;     
    } 
    //Função que adiciona os números pares no início da lista e os números ímpares no final da lista
    void inserir(Lista* lista, int valor){
    	if(lista(valor) % 2 = 0){
    		inserirInicio();
    	} else {
    		inserirFinal();
    	}
    }
    
    void listar(Lista* lista){
       No* ponteiro = lista->primeiro;
       while(ponteiro!= NULL){
           printf("%d ",ponteiro->dado);             
           ponteiro = ponteiro->proximo;              
       }   
       printf("\n");
    }
    
    int main(int argc, char *argv[]){
      Lista* lista = (Lista*) malloc(sizeof (Lista));   
      criarLista(lista);
      int op=0,valor;
      do{
        system("cls");  
        printf("\n1-Inserir no Final\n2-Inserir no Inicio\n3-Listar\n4-Sair\n");
        scanf("%d",&op);
        switch(op){
           case 1:printf("\nInforme o Valor:");
                  scanf("%d",&valor);
                  inserirFinal(lista,valor);
                  break;
           case 2:printf("\nInforme o Valor:");
                  scanf("%d",&valor);
    	   		  inserirInicio(lista,valor);
                  break;
           case 3:system("cls");
                  listar(lista);                
                  system("PAUSE");	
        }  
      }while(op != 4);     
      system("PAUSE");	
      return 0;
    }

    Boa tarde! preciso fazer a implementação da função:

    //Função que adiciona os números pares no início da lista e os números ímpares no final da lista
    void inserir(Lista* lista, int valor){
        if(lista(valor) % 2 = 0){
            inserirInicio();
        } else {
            inserirFinal();
        }
    }

    para caso o novo número inserido seja para, vá para o início da lista e caso ímpar, vá para o final da lista. Para isso já foram implementadas as funções InserirFinal() e InserirInicio(), alguém poderia me ajudar e esclarecer onde estou errando?

  9. #include <stdio.h>
    #include <stdlib.h>
    
    struct funcionario{   //struct que cria o tipo char para nome e float para salário
    	char nome[50];    //nome funcionario
    	float salario;    //salário funcionário
    };
    
    typedef struct funcionario funcionario_t;  //typedef nomeia a struct funcionario para funcionario_t
    
    void cadastra_funcionario(funcionario_t lista_funcionario[], int tamanho_lista)
    {
    	funcionario_t novo_funcionario;
    	tamanho_lista = 0;
    	printf("Digite nome do funcionario: \n");
    	scanf("\n%s", novo_funcionario.nome);
    	printf("Digite salario do funcionario \n");
    	scanf("\n%f", &novo_funcionario.salario);
    	lista_funcionario[tamanho_lista] = novo_funcionario;
    	tamanho_lista++;
    }
    
    
    funcionario_t maior_salario(funcionario_t lista_funcionario[], int tamanho_lista){   //funcao para maior salario
    	if (tamanho_lista > 0) {
    					int i, maior_indice;
    					float maior_salario = 0;
    					for (i = 0; i < tamanho_lista; i++) {
    						if (lista_funcionario[i].salario > maior_salario) {
    					maior_salario = lista_funcionario[i].salario;
    					maior_indice = i;
    				}
    			printf("Nome funcionario: %s\n", lista_funcionario[maior_indice]);
    			printf("Maior salario funcionario: %f\n", maior_salario);
    			}
    	}
    }
    	
    int main(void){         //função main, chama as funcões acima
    	funcionario_t lista_funcionario[50];
    	int tamanho_lista = 0;
    	int continuar = 1;
    	char opcao;
    	do{
    		printf("===================================\n");  //insere uma "barra"
    		printf(" Digite 1 para cadastrar: \n Digite 2 para maior salario:\n Digite 0 para sair:\n ==> ");  //mostra "menu" em números para evitar case sensitive se houver.
    		scanf("\n\n%c", &opcao);
    		
    		switch(opcao){
    			case '1':
                    cadastra_funcionario(lista_funcionario, tamanho_lista);  //chama funcao cadastra_funcionario
    				tamanho_lista++;
    				break;
    			
    			case '2':
    				maior_salario(lista_funcionario, tamanho_lista);  //chama funcao maior_salario
    				break;
    			
    			case '0':
    				continuar = 0;
    			
    			default:    // em caso de não informar nenhum numero encerra o programa
    				continuar = 0;
    			}
    	} 
    	
    	while (continuar == 1);{          //continuar a execução do do
    	
    	
    	getchar();
    	return 0;
        }
    }

    Boa tarde! estou tentando desenvolver este programa que tem que ter além da função main, as funções voidcadastra_funcionario e funcionario_tmaior_salario...o ojetivo é que o programa receba os dados dos funcionários e ao solicitar informações sobre o funcionário de maior salário, retorne o Nome e o maior salário...acontece que o printf retorna o nome e o maior salário, de fato, do funcionário, mas a quantidade de vezes do número de funcionários cadastrados...alguém poderia ajudar!?

  10. #include <stdio.h>
    #include <locale.h>
    
    int main(void) {
    	
    	const int bimestresAnuais = 4; //constantes porque não podem ser alteradas durante o programa, são variáveis fixas.
    	const int numeroDeAlunos = 4;
    	
    	float notasAlunos[numeroDeAlunos][bimestresAnuais] = {0};
    	float mediasAlunos[numeroDeAlunos] = {0};
    	
    	float media = 0;
    	int aluno, notas;
    	
    	printf("Insira as 4 notas do aluno 1:\n");
    	
    	for (aluno = 0; aluno < numeroDeAlunos; aluno++) {
    		for (notas = 0; notas < bimestresAnuais; notas++) {
    			scanf("%f", &notasAlunos[aluno][notas]);
    			media += notasAlunos[aluno][notas];
    		}
    		mediasAlunos[aluno] = media / bimestresAnuais;
    		media = 0; //reseta a variável média para iniciar novo ciclo
    		printf("Insira as 4 notas do aluno %i:\n", aluno + 2);
    	}
    	
    	for (aluno = 0; aluno < numeroDeAlunos; aluno++) {
    		printf("A media do aluno %i é %.2f\n", aluno + 1, mediasAlunos[aluno], setlocale(LC_ALL, ""));
    	}
    	
    	return 0;
    	system("pause");
    }

    Estou tentando compilar este programa e está apresentando os seguintes erros:

    In function 'main':
    [Error] variable-sized object may not be initialized
    [Warning] excess elements in array initializer
    [Warning] (near initialization for 'notasAlunos[0]')
    [Warning] excess elements in array initializer
    [Warning] (near initialization for 'notasAlunos')
    [Error] variable-sized object may not be initialized
    [Warning] excess elements in array initializer
    [Warning] (near initialization for 'mediasAlunos')

     

    Alguém saberia dizer porque está dando esse erro!? no exemplo do professor rodou....

    • Curtir 1
  11. #include <stdio.h>
    #include <ctype.h>         // Uso da função toupper
    
    struct funcionario{
        char nome[50];
        float idade;
    };
    
    struct funcionario lista_funcionarios[50];
    
    void cadastra_funcionario(int* tamanho_lista){
    
        printf("Informe o nome do funcionario \n");
        scanf("%s[^\n]%*c", lista_funcionarios[*tamanho_lista].nome);
    
        printf("Informe a idade do funcionario \n");
        scanf("%f%*c", &lista_funcionarios[*tamanho_lista].idade);
        (*tamanho_lista)++;
    }
    
    void media_idade(struct funcionario lista_funcionarios[], int* tamanho_lista) {
        if (*tamanho_lista > 0) {
            int i, maior_indice = 0;
            float media_idade; 
            media_idade = lista_funcionarios[*tamanho_lista].idade / *tamanho_lista;
        	printf("Media de idade dos funcionarios cadastrados e: %f \n", media_idade);
    	}
    		
    }
    
    int main(void) {
        int tamanho_lista = 0;
        int continuar = 1;
        char opcao;
        do {
            printf ("Digite C para cadastrar ou M para saber a media de idade dos funcionarios \n");
            scanf("%c%*c", &opcao);
            opcao = toupper(opcao);
            switch (opcao) {
            case 'C':
                cadastra_funcionario( &tamanho_lista);
                break;
            case 'M':
                media_idade(lista_funcionarios, &tamanho_lista);
                break;
            default:
                continuar = 0;
        	}
    	} while (continuar == 1); 
        getchar();
        return 0;
    }

    Preciso calcular a média de idade dos funcionários cadastrados...não estou conseguindo, além de, após calcular média, o programa não encerra e continua solicitando para cadastrar ou calcular a media...alguém poderia ajudar-me!? e explicar o que estou fazendo de errado, se possível...

    • Curtir 1
  12. Muito Obrigado a todos.

    adicionado 8 minutos depois

    @Mauro Britivaldo e aos demais colegas, quer dizer que o comando sizeof força a variável armazenar bytes por passagem de parâmetros mesmo de capacidades diferentes? tipo: char só suporta 1 byte e short suporta 2 bytes, com o comando sizeof o ponteiro entres esses dois tipos é possível? foi que ocorreu no código

     

    Obs.: O programa estava com outro probleminha que percebi depois, mas foi resolvido, a variável soma também era do tipo short e quando a soma dava mais que o valor suportado pelo tipo short, o programa apresentava erro, conseguir resolver declarando soma como int.

    adicionado 8 minutos depois

    @Mauro Britivaldo e aos demais colegas, quer dizer que o comando sizeof força a variável armazenar bytes por passagem de parâmetros mesmo de capacidades diferentes? tipo: char só suporta 1 byte e short suporta 2 bytes, com o comando sizeof o ponteiro entres esses dois tipos é possível? foi que ocorreu no código

     

    Obs.: O programa estava com outro probleminha que percebi depois, mas foi resolvido, a variável soma também era do tipo short e quando a soma dava mais que o valor suportado pelo tipo short, o programa apresentava erro, conseguir resolver declarando soma como int.

    • Curtir 1
  13. #include <stdio.h>
    #include <stdlib.h>
    
    void soma(short* a, short* b) 
    {
    	*a = x;
    	*b = y;
    	}	
    	
    int main(void)
    
    {
    	char x, y; //2 variáveis do tipo char
    	printf("Informe um numero entre -32767 e 32767\n");
    	scanf("%c", &*x);
    	printf("Informe outro numero entre -32767 e 32767\n");
    	scanf("\n%c", &*y);
    	a = x;
    	b = y;
    	short soma = a + b;
    	printf("Primeiro numero eh: %hi\n", x);
    	printf("Segundo numero eh: %hi\n", y);
    	printf("A soma dos numeros eh: %hi\n", soma);
    	system ("pause");
    	return 0;
    }

    Boa Noite!

     

    Preciso criar um programa que recebe dois números inteiros (short) que possam ser armazenados por variáveis (char) e transfiram seus valores para variáveis do tipo short e some os valores desses dois números, salvando o resultado também em uma variável do tipo short. Penso que isso deve ser feito através de ponteiros, mas já quebrei a cabeça e não saio do lugar. Algum colega conseguiria ajudar-me!?

  14. Em 08/01/2018 às 23:32, cyer disse:

    Código fixado:

    
    #include <stdio.h>
    #include <stdlib.h>
    #include <ctype.h>         // Uso da função toupper
    
    struct funcionario { //cria a struct funcionario 
        char nome[50]; //cria a variável nome 
        float salario; //cria a variável salario
    };
    
    funcionario lista_funcionarios[50]; // Precisa ser definida como global ou ser definida dentro da função main e passar ela como argumento para as outras funções
    
    void cadastra_funcionario (int& tamanho_lista)
    {
        //função que cadastra um novo funcionário
        printf("Informe o nome do funcionario \n");
        scanf("\n%s", &lista_funcionarios[tamanho_lista].nome);
        
        printf("Informe o salario do funcionario \n");
        scanf("\n%f", &lista_funcionarios[tamanho_lista].salario);
        tamanho_lista++;
        //fim da função que cadastra um novo funcionário
    }
    
    funcionario maior_salario(funcionario lista_funcionarios[], int tamanho_lista)
    {
        //função que encontra o funcionário com maior salário
        //int tamanho_lista = 0;
        if (tamanho_lista > 0) 
        {
            int i, maior_indice;
            float maior_salario;
            for (i = 0; i < tamanho_lista; i++) 
            {
                if (lista_funcionarios[i].salario > maior_salario) 
                {
                    maior_salario = lista_funcionarios[i].salario;
                    maior_indice = i;
                }
            }
            printf("Nome: %s\n", lista_funcionarios[maior_indice].nome);
        	printf("Maior salario: %f\n", maior_salario);
        }
        //fim da função que encontra o funcionário com maior salário
    }
    
    int main(void) //função responsável por perguntar ao usuário se deseja cadastrar funciOnário ou saber o maior salário
    {
        int tamanho_lista = 0;
        int continuar = 1;
        char opcao;
        do {
            printf ("Digite C para cadastrar ou M  para saber o maior salario \n");
            scanf("\n\n%c", &opcao);
            opcao = toupper(opcao); // A linguagem C é uma linguagem case sensitive, então precisa converter para maiusculo nesse caso
            switch (opcao) {
                case 'C':
                    cadastra_funcionario(tamanho_lista);
                    break;
                case 'M':
                    maior_salario(lista_funcionarios, tamanho_lista);
                    break;
                default:
                    continuar = 0;
            }
        } while (continuar ==1); {
        //fim da função responsável por perguntar ao usuário se deseja cadastrar funcionário ou saber o maior salário
        system("pause");
        return 0;
        }
    }

     

    muito obrigado

    adicionado 8 minutos depois

    @cyer muito obrigado.

    adicionado 21 minutos depois

    @vangodp muito obrigado. Não conhecia essa biblioteca: #include <ctype.h>.

    Minha dúvida é:

        printf("Informe o nome do funcionario \n");
        scanf("%s[^\n]%*c", lista_funcionarios[*tamanho_lista].nome);
    
        printf("Informe o salario do funcionario \n");
        scanf("%f%*c", &lista_funcionarios[*tamanho_lista].salario);

    1. Porque o segundo scanf armazena o salário do funcionário (através do &) e o primeiro scanf não?

    2. qual o objetivo  do primeiro comando scanf percorrer os caracteres ([^\n])?

    3. qual o objetivo do getchar() no final do programa?

    Fico muito grato se puder esclarecer-me essas dúvidas, tenho outras dificuldades, mas acredito que é por estar tendo os primeiro contatos e logo logo serão sanadas...

     

     

  15. #include <stdio.h>
    #include <stdlib.h>
    
    struct funcionario { //cria a struct funcionario 
    	char nome[50]; //cria a variável nome 
    	float salario; //cria a variável salario
    };
    
    typedef struct funcionario funcionario_t; 
    
    void cadastra_funcionario ()
    {
    	//função que cadastra um novo funcionário
    	funcionario_t lista_funcionarios[50];
    	funcionario_t novo_funcionario;
    	int tamanho_lista = 0;
    	printf("Informe o nome do funcionario \n");
    	scanf("\n%s", &novo_funcionario.nome);
    	printf("Informe o salario do funcionario \n");
    	scanf("\n%f", &novo_funcionario.salario);
    	lista_funcionarios[tamanho_lista] = novo_funcionario;
    	tamanho_lista++;
    	//fim da função que cadastra um novo funcionário
    }
    
    funcionario_t maior_salario(funcionario_t lista_funcionarios[], int tamanho_lista)
    {
    	//função que encontra o funcionário com maior salário
    	//int tamanho_lista = 0;
    	if (tamanho_lista > 0) {
    					int i, maior_indice;
    					float maior_salario = 0;
    					for (i = 0; i < tamanho_lista; i++) {
    						if (lista_funcionarios[i].salario > maior_salario) {
    					maior_salario = lista_funcionarios[i].salario;
    					maior_indice = i;
    				}
    			printf("Nome: %s\n", lista_funcionarios[maior_indice]);
    			printf("Maior salario: %f\n", maior_salario);
    			}
    	}
    	//fim da função que encontra o funcionário com maior salário
    }
    
    int main(void) //função responsável por perguntar ao usuário se deseja cadastrar funciOnário ou saber o maior salário
    {
    	funcionario_t lista_funcionarios[50];
    	int tamanho_lista = 0;
    	int continuar = 1;
    	char opcao;
    	do {
    		printf ("Digite C para cadastrar ou M  para saber o maior salario \n");
    		scanf("\n\n%c", &opcao);
    		switch (opcao) {
    			case 'C':
    				cadastra_funcionario(lista_funcionarios, tamanho_lista);
    				tamanho_lista++;
    				break;
    			case 'M':
    				maior_salario(lista_funcionarios, tamanho_lista);
    				break;
    			default:
    				continuar = 0;
    		}
    	} while (continuar ==1); {
    	//fim da função responsável por perguntar ao usuário se deseja cadastrar funcionário ou saber o maior salário
    	system("pause");
    	return 0;
    	}
    }

    Boa noite, tentei criar um programa que cadastra funcionários e seus respectivos salários. Este se utiliza de 3 funções: main, cadastra_funcionario e maior_salario, acontece que quando o usuário solicita o maior salário, O PROGRAMA retorna (através do printf) o nome e o salário de todos os cadastrados e sem nenhum valor. outra coisa é que o programa só aceita como dado de entrada 'C' ou 'M' em maiúsculas para cadastrar ou saber o maior salário. Já quebrei a cabeça e nada, alguém poderia me ajudar?   

     

    • Curtir 1
  16. @Simon Viegas muito obrigado pelas dicas, Simon. Realmente a questão do contrassenso de criar a variável vogais para consoantes eu tinha percebido e é uma excelente observação sua. Não mudei pelo fato de estar iniciando e após bater cabeça com o que parece "simples", para alguns, fiquei com receio de dar problema de novo no programa.

    Quanto ao fato da "dicotomia", como havia falado, não vi ainda bibliotecas que aceita acentuação gráfica e outros conceitos e por isso o programa foi feito como se só existisse vogais e consoantes mesmo e em letras minúsculas, sem acentos...

     

    Agradeço muito sua observação e dicas, contribuiu e vai contribuir muito para meu aprendizado...Deus retribua em dobro a vocês, pois "quem ensina algo, aprende duas vezes". 

    • Curtir 1

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!