Ir ao conteúdo
  • Cadastre-se

vangodp

Membro Pleno
  • Posts

    1.752
  • Cadastrado em

  • Última visita

posts postados por vangodp

  1. 57 minutos atrás, arfneto disse:

    o tal '\n' não é lixo. 

    Acho que você ainda n entendeu...
    A definição de lixo você pode ver aqui->https://pt.wiktionary.org/wiki/lixo

    Mas o ponto mais importante é "coisas inúteis". Em nosso caso \n ou <ENTER> como você mostra é lixo. Em C/C++ se usa analogias para muitas coisas. Quando se referi a limpar buffer você imagina uma faxineira lá, de escovinha na mão, jogando o lixo fora? Não!!!! É pura analogia arfneto. Se a analogia é "LIMPAR O BUFFER", a pergunta é "do que", o que está lá é lixo mesmo que você n goste dessa analogia. Tendeu?

     

    1 hora atrás, arfneto disse:

    Se você digitou 1234azul<ENTER> isso está lá no buffer do teclado. O sistema não sabe como você vai ler.

    Sei como funciona o buffer. Acho que com o anterior deixei claro o que quero dizer com lixo né.
     

    1 hora atrás, arfneto disse:

    suspeito que muitos sequer terminem de ler isso, quanto mais rodar um programa...

    Eu sim estou lendo.

     

    1 hora atrás, arfneto disse:

    Mas se alguém disser que vai ler/rodar eu escrevo um.

    Claro que vão rodar... Por que você diz que não?

     

    1 hora atrás, arfneto disse:

    Vou repetir: scanf() foi feita para... scan formatted input: ler entrada formatada. E é uma função genial, Economiza horas. Em coisas como ler um arquivo csv por exemplo, aqueles com campos separados por vírgulas.

     

    O teclado não é isso. As pessoas são incrivelmente criativas ao digitar, como se sabe. Depois vou mostrar um exemplo curto.

    👍

     

    adicionado 4 minutos depois
    1 hora atrás, arfneto disse:

    Eu programava em C nos anos 80 e já dizia isso.

    você quase é mais velho que a linguagem shuehsuhe.

    você nem usa C não é? certamente você usa C# shuehs. ou pode que C++

    • Curtir 1
  2. entendi... Pera ai que vou fazer um test

    adicionado 15 minutos depois

    O salário você precisaria calcular ele antes de mandar para o arquivo?

    adicionado 16 minutos depois

    Por exemplo Docente recebe 2500$ por cada hora. Quando o programa pedi o salário isso deveria ser calculado antes de mandar valor algum para o arquivo.

    adicionado 19 minutos depois
    Spoiler

    Screenshot_3.png.8382866bbb63c642ad1db0023bfdfbba.png

     

    adicionado 26 minutos depois
    3 horas atrás, Andrah disse:

    1. Escreva uma função, que insira dados de N funcionários da Universidade Cabo Verde e envia-los para ficheiro como o nome 

    Esses dados como salário, acho que pode omitir... porque isso pode ser calculado na hora de mostrar... tipo se trabalha 8 horas por dia multiplica por 30 e dai sai  salário...(falo de forma simplificada para ter uma ideia).

    No seu programa você pode por
    float horaDocente = 2500;

    dai na hora de imprimir pode ser
    salario = funcionario.horasTrabalhadas * 30;

    adicionado 31 minutos depois

    Seu programa tem alguns outros erros que acho que é critico. Por exemplo...
    struct Funcionario* p = ( struct Funcionario * ) malloc ( sizeof ( struct Funcionario ) );

    aqui você ta reservando 1 só elemento do tamanho de 1 struct Funcionario. Se o que você quer é um array de Funcionarios o correto seria
    struct Funcionario* p = ( struct Funcionario * ) malloc ( sizeof ( struct Funcionario ) * X );

    Onde o X é o numero de elementos do array.

    adicionado 36 minutos depois

    E outro problema maior ainda é que ao chamar a função

    menu ( funcionario, n ); você passa um n que nem deu valor inicial... logo escolhemos 1 no menu e repassamos esse n para IncerirFuncionario, porém sem um valor definido. Esse valor n depois é usado para int y que somado a i você usa para o limite do for mais abaixo for ( i = 0; i < y; i++ )... <---Qual o valor desse y????

    adicionado 37 minutos depois

    realmente você precisa que seu programa leia um array??? Acho que dava para fazer sem arrays sei lá.

    • Amei 1
  3. 1 minuto atrás, isrnick disse:

    se você entende o que a função faz, também entende em que situação deve usar e quando não,

    Eu sei... mas ela não está livre de erros também. Acho que n existe nada infalivel. Sei lá... essa também era minha forma idônea, até que vi o vídeo. heheh
     

    Desde logo o que uso sempre é %*c... nunca me falhou. Acho que a melhor forma é uma combinação de coisas. Um dia eu afino heheh

    • Curtir 1
  4. 27 minutos atrás, isrnick disse:

    @vangodp Você definiu char buffer com tamanho 100, mas deveria usar a constante BUFSIZ que é o tamanho ótimo de buffer estimado para um arquivo I/O.

    Sinta-se livre de modificar/melhorar como quiser... se quiser aportar algo será muito bem vindo. Talvez sejamos capazes de buscar uma solução para o maldito buffer de uma vez por todas sheusheush

     

    27 minutos atrás, isrnick disse:

    Usar a função setbuf(stream, buffer) é uma abreviação de usar setvbuf(stream, buffer, _IOFBF, BUFSIZ) , note que já é assumido o tamanho BUFSIZ para o buffer, se quiser usar um buffer com tamanho diferente terá que usar a função setvbuf() diretamente alterando o último parâmetro, ao invés de setbuf().

    Eu não uso essa função.. somente queria que você observara o que passa se por essa flush sua antes do imput. Eu também uso ela algumas vezes.

     

     

    adicionado 1 minuto depois

    Eu n falei que o modo de limpar o buffer nesse video fosse o mais indicado, mas ele encontrou um caso que pode dar falho.

    adicionado 13 minutos depois

    proponho:
     

    #include <stdio.h>
    #include <stdarg.h>
    
    
    void miscanf ( const char *format, ... ) {
        char buffer[BUFSIZ];
        fgets ( buffer, 100, stdin );
        
        va_list args;
        va_start ( args, format );
        vsscanf ( buffer, format, args );
        va_end ( args );
    }
    
    
    
    int main() {
        char str1[100];
        char str2[100];
        
        miscanf("%s", str1); /*Ler palavras */
        miscanf("%[^\n]%*c", str2);/*Ler frases(espaços)*/
        
        printf("%s\n", str1);
        printf("%s\n", str2);    
    
        
        return 0;
    }

    🤣

    adicionado 17 minutos depois

    função 100% livre de problemas de entrada... Se tomar o conselho de declarar char buffer[100] tal como @isrnick falou

    char buffer[BUFSIZ];

    melhor ainda shuehseu. E se alguém quiser melhorar mais ainda seja bem vindo.

    • Curtir 1
  5. 4 minutos atrás, Andrah disse:

    Teria sim eu entende o que você me explicou 

    Espero que sim... de toda forma indiquei uma leitura. E sempre é bom ver o ponto de vista de outros usuários.
     

    adicionado 6 minutos depois

    Querem saber qual é a forma mais idonea de ler o buffer para mim?
     

    #include <stdio.h>
    
    int main(){
        char string[100];
        char buffer[100];
        
        fgets(buffer,100,stdin);
        sscanf(buffer,"%s",string);
        printf("Cadena: %s",string);
        return 0;
    }

    Um exemplo:

    //fgets+sscanf
    #include <stdio.h>
    
    int main(){
        char buffer[100];
        char palavra[100];
        int n;
        char frase[100];
        
        
        fgets(buffer,100,stdin);
        sscanf(buffer,"%s",palavra);
          
    
        fgets(buffer,100,stdin);
        sscanf(buffer,"%d", &n);
        
        fgets(buffer,100,stdin);
        sscanf(buffer,"%[^\n]", frase);    
        
        printf("%s\n%d\n%s\n\n", palavra, n, frase);
        
        return 0;
    }

    Pode incluso ser montado alguma função com isso se quiser facilitar.

     

     

     



     

    adicionado 7 minutos depois

    Em fim... é só uma a mais de tantas hehehe.

    • Obrigado 1
  6.  

    4 minutos atrás, arfneto disse:

    que mostra o que tem no buffer da console ANTES de você ler, ou pergunte e tento mostrar um exemplo melhor.

    Eu não tenho problemas com buffer... Quem precisa é @Andrah Sinta-se livre de fazer um bonito tutorial desses que você tem paciência para fazer... Ja que você entrou em tecnicismos agora n vai ficar no meio n é? 🤣

    adicionado 0 minutos depois

    Isso pode ajudar a muita gente, e de passo, talvez, seja possivel aprender algo novo hoje.

    adicionado 1 minuto depois

    E uma coisa... \n no buffer para mim é lixo, diga o que diga.

    • Amei 1
    • Haha 1
  7. até que você aprenda a limpar o buffer corretamente ponha um fflush antes de ler qualquer string

    adicionado 0 minutos depois

                fflush ( stdin );
                scanf ( "%s%*c", funcionario.categoria );

    adicionado 2 minutos depois

    Mas realmente sou totalmente contra de fflush, e nunca recomendo isso. Termine seu programa e depois tente usar qualquer outra forma... você ja viu que alguns companheiros indicaram algumas formas, e qualquer delas é melhor que fflush. Se seu professor está recomendando isso talvez não seja um bom tutor.

    • Amei 1
  8. //bibliotecas
    #include <stdio.h>
    #include <stdlib.h>
    #include <locale.h>
    #include <string.h>
    #include <conio.h>
    #include <time.h>
    
    //Dados do funcionário
    struct Funcionario {
        char nome[20];
        int NIF;
        char categoria[20];
        float salario;
        int Hora_Trabalhados;
    };
    
    // Para não atrapalhar o bom funcionamento
    void menu ( struct Funcionario funcionario[], int n );
    
    void pressioneEnter() {
        char c;
        
        do {
            c = getch();
        } while ( c != 13 );
    }
    
    
    
    void IncerirFuncionario ( struct Funcionario funcionario[], int n ) {
        system ( "COLOR 0F" );
        FILE *file; // cria variável ponteiro para o arquivo
        file = fopen ( "funcionarios.txt", "w" ); //abrindo o arquivo
        
        if ( file == NULL ) //testando se o arquivo foi realmente criado
            printf ( "\n-->Nao foi possivel abrir o fecheiro\n\n" );
        else {
            printf ( "\n\n\n\n\tUNICV \n\n" );
            printf ( "\n\n\n\t\tDigite o numero de Funcionarios que pretende registrar: " );
            scanf ( "%i", &n );
            fflush ( stdin );
            system ( "cls" );
            static int i = 0;
            int y = n + i;
            
            if ( y > 99 )
                menu ( funcionario, n );
                
            printf ( "\n\n\n\t\t-------- INSCRIÇÃO DE FUNCIONÁRIO --------\n\n" );
            fprintf ( file, "\n\n\t----- LISTA DOS FUNCIONÁRIOS ----\n\n" );
            fprintf ( file, "\tNome      NIF 	  Salário     Categoria  Horas\n\n" );
            
            for ( ; i < y; i++ ) {
                system ( "COLOR 0B" );
                // para obter dados e armazenar no arquivo
                printf ( "\n\tDigite o nome do funcionário: " );
                scanf ( " %s", funcionario[i].nome );
                printf ( "\n\tDigite o NIF do funcionário: " );
                scanf ( "%d", &funcionario[i].NIF );
                printf ( "\n\tDigite o salario do funcionario: " );
                scanf ( "%f", &funcionario[i].salario );
                printf ( "\n\tDigite a categoria do funcionário: " );
                scanf ( " %s", funcionario[i].categoria );
                printf ( "\n\tDigite a Hora trabalhados pelo funcionário: " );
                scanf ( "%d", &funcionario[i].Hora_Trabalhados );
                printf ( "\n\n" );
                //A Escrevendo no arquivo
                fprintf ( file, "\t%s \t %d \t %.1f \t %s\t %d\n", funcionario[i].nome, funcionario[i].NIF, funcionario[i].salario, funcionario[i].categoria, funcionario[i].Hora_Trabalhados );
            }
            
            printf ( "\n\t\t-------------------------<3--------------------------\n" );
            printf ( "\n\t Incritos com sucesso! \n\n\t Registado no fecheiro -> funcionarios.txt\n\n" );
            printf ( "\n\n\n\t\t\tPressione ENTER para Continuar->" );
            fflush ( stdin );
            pressioneEnter();
            system ( "cls" );
            menu ( funcionario, y );
        }
        
        fclose ( file ); // para fechar o arquivo
    }
    
    void ImprimirFuncionarios ( struct Funcionario funcionario[], int n ) {
        FILE *file;
        
        file = fopen ( "C:\\Users\\alex\\Desktop\\teste4\\funcionarios.txt", "r" );
        
        if ( file == NULL )
            printf ( "\n-->Nao foi possivel abrir o fecheiro\n\n" );
            
        else {
            int i;
            printf ( "\n\n\n\t\t------- LISTA DOS FUNCIONÁRIOS ------\n\n" );
            
            for ( i = 0; i < n; i++ ) {
                system ( "COLOR 0F" );
                fscanf ( file, "%s", funcionario[i].nome );
                fscanf ( file, "%d", &funcionario[i].NIF );
                fscanf ( file, "%f", &funcionario[i].salario );
                fscanf ( file, "%s", funcionario[i].categoria );
                fscanf ( file, "%d horas", &funcionario[i].Hora_Trabalhados );
                printf ( "\n\tNome: %s", funcionario[i].nome );
                printf ( "\n\tNIF: %d", funcionario[i].NIF );
                printf ( "\n\tSalario: %.1f $00", funcionario[i].salario );
                printf ( "\n\tCategoria: %s", funcionario[i].categoria );
                printf ( "\n\tHoras de trabalho: %d horas", funcionario[i].Hora_Trabalhados );
                printf ( "\n\n----------------------------------------------------------\n" );
            }
        }
        
        printf ( "\n\n\n\t\t\tPressione ENTER para Continuar->" );
        fflush ( stdin );
        pressioneEnter();
        system ( "cls" );
        fclose ( file );
        
    }
    void OrdenarFuncionario ( struct Funcionario *funcionario, int n ) {
    
        int i, j;
        struct Funcionario aux;
        
        for ( i = 1; i < n; i++ ) {
            aux = funcionario[i] ;
            
            for ( j = i; ( j > 0 ) && ( aux.salario < funcionario[j - 1].salario ); j-- ) {
                funcionario[j] = funcionario[j - 1];
                funcionario[j] = aux;
            }
            
        }
        
        printf ( "\n\n\n\t------- LISTA DOS FUNCIONÁRIOS POR ORDEM CRESCENTE ------\n\n" );
        
        for ( i = 0; i < n; i++ ) {
        
            printf ( "\n\tNome: %s", funcionario[i].nome );
            printf ( "\n\tNIF: %d", funcionario[i].NIF );
            printf ( "\n\tSalario: %.1f $00", funcionario[i].salario );
            printf ( "\n\tCategoria: %s", funcionario[i].categoria );
            printf ( "\n\tHoras de trabalho: %d horas", funcionario[i].Hora_Trabalhados );
            printf ( "\n\n----------------------------------------------------------\n" );
            
        }
        
        printf ( "\n\n\n\t\t\tPressione ENTER para Continuar->" );
        fflush ( stdin );
        pressioneEnter();
        system ( "cls" );
    }
    
    
    void EliminarFuncionario ( struct Funcionario funcionario[], int n ) {
        FILE *file;
        
        //Abre o arquivo novamente para leitura
        file = fopen ( "funcionarios.txt", "r+" );
        
        if ( file == NULL )
            printf ( "\n-->Nao foi possivel abrir o fecheiro\n\n" );
            
        else {
            int nif, i=0;
            char resp;
            printf ( "\n\tInforme o NIF do funcionario a ser Eliminado: " );
            scanf ( "%d", &nif );
            
            while ( funcionario[i].NIF == nif ) {
            
                //if ( funcionario[i].ativo== 1 ) {
                
                printf ( "\n\tNome: %s", funcionario[i].nome );
                printf ( "\n\tNIF: %d", funcionario[i].NIF );
                printf ( "\n\tSalario: %.1f $00", funcionario[i].salario );
                printf ( "\n\tCategoria: %s", funcionario[i].categoria );
                printf ( "\n\tHoras de trabalho: %d horas", funcionario[i].Hora_Trabalhados );
                printf ( "\n\n----------------------------------------------------------\n" );
                // }
                printf ( "\n\tDeseja realmente eliminar o Funcionário? S/N:" );
                scanf ( "%c", &resp );
                
                if ( ( resp == 'S' ) || ( resp == 's' ) ) {
                    //   funcionario[i].ativo=0;
                    printf ( "\n\tFuncionário eliminado com sucesso\n" );
                    break;
                } else {
                    if ( ( resp == 'N' ) || ( resp == 'n' ) ) {
                        printf ( "\tEliminação cancelada!\n" );
                        break;
                    }
                }
            }
            
            i++;
            
            if ( i > 99 )
                printf ( "\n\n\t\tNIF não encontrado\n" );
        }
        
        fclose ( file );
        printf ( "\n\n\n\t\t\tPressione ENTER para Continuar->" );
        fflush ( stdin );
        pressioneEnter();
        system ( "cls" );
    }
    
    void menu ( struct Funcionario funcionario[], int n ) {
        int op;
        
        do {
            system ( "COLOR 0F" ); //Menu
            printf ( "\n\n\t\t\t\t---> SISTEMA DE REGISTO E CONTROLE DE FUNCIONÁRIO \n\n" );
            printf ( "\n\t\t* 1 ------- INSERIR OS FUNCIONÁRIOS E ENVIA-LOS PARA O FICHEIRO ------------------------ *\n" );
            printf ( "\n\t\t* 2 ------- IMPRIMIR A LISTA DOS FUNCIONÁRIOS DO FICHEIRO ------------------------------ *\n" );
            printf ( "\n\t\t* 3 ------- IMPRIMIR OS FUNCIONÁRIOS POR CATEGORIA ------------------------------------- *\n" );
            printf ( "\n\t\t* 4 ------- GASTO DA UNIVERSIDADE COM OS FUNCIONÁRIOS ---------------------------------- *\n" );
            printf ( "\n\t\t* 5 ------- CALCULAR O SALÁRIO DE UM FUNCIONÁRIO X EM FUNÇÃO DO SEU SALÁRIO POR HORA --- *\n" );
            printf ( "\n\t\t* 6 ------- ORDENAR FUNCIONÁRIO NA ORDEM CRESCENTE ------------------------------------- *\n" );
            printf ( "\n\t\t* 7 ------- IMPRIMIR OS FUNCIONÁRIOS COM SALÁRIO MAIOR QUE 75000$ ---------------------- *\n" );
            printf ( "\n\t\t* 8 ------- ELIMINAR UM FUNCIONÁRIO A PARTIR DO Nº DO NIF ------------------------------ *\n" );
            printf ( "\n\t\t* 0 ------- Sair\n\n" );
            printf ( "\n\tEscolha uma opcao: " );
            scanf ( "%d", &op );
            printf ( "\n" );
            
            switch ( op ) {
                case 0:
                    printf ( "\t\t\t\t\t\t\t\t\t\t-> Saindo... \n" );
                    printf ( "\tPressione ENTER para Sair->" );
                    fflush ( stdin );
                    pressioneEnter();
                    system ( "cls" );
                    break;
                    
                case 1:
                    system ( "cls" );
                    IncerirFuncionario ( funcionario, n );
                    break;
                    
                case 2:
                    system ( "cls" );
                    ImprimirFuncionarios ( funcionario, n );
                    break;
                    
                case 6:
                    system ( "cls" );
                    OrdenarFuncionario ( funcionario, n );
                    break;
                    
                case 8:
                    system ( "cls" );
                    EliminarFuncionario ( funcionario, n );
                    break;
                    
                default:
                    system ( "COLOR C0" );
                    printf ( "\n\t\t\t\t*-*-*-*-- ERRO --> Numero INVALIDO!\n\n" );
                    printf ( "\n\tPressione ENTER para Tentar Novamente->" );
                    fflush ( stdin );
                    pressioneEnter();
                    system ( "cls" );
            }
        } while ( op != 0 );
        
    }
    int main() {
        setlocale ( LC_ALL, "Portuguese" );
        struct Funcionario funcionario[100];
        int n;
        struct Funcionario* p = ( struct Funcionario * ) malloc ( sizeof ( struct Funcionario ) );
        
        if ( p == NULL ) {
            printf ( "\n\t ERRO MEMÓRIA INSUFICIENTE!\n" );
            exit ( 1 ); //Terminar o programa
        }
        
        system ( "COLOR F0" ); //Abertura do programa
        printf ( "\n\n\n\n\n\t\t\t....................................................................\n" );
        printf ( "\n\t\t\t\t----> SISTEMA DE REGISTO E CONTROLE DE FUNCIONÁRIO \n" );
        printf ( "\n\t\t\t.....................................................................\n\n\n\n\n" );
        printf ( "\n\t\t\t                                                                      UNICV \n\n" );
        printf ( "\n\tPressione ENTER para iniciar->" );
        fflush ( stdin );
        pressioneEnter();
        system ( "cls" );
        menu ( funcionario, n );
        free ( p );
        return 0;
    }
    Spoiler

    Screenshot_3.thumb.png.e4a431f38f25bd18685f86658f0f58fd.png

     

    adicionado 1 minuto depois

    Vou rodar ele e ver o que acontece.... Quero ver o arquivo gerado.

    adicionado 3 minutos depois

    Temos outro erro... mas agora é problema de sujeira na memória.
     

    Spoiler

    Screenshot_3.png.0396a34f4baee05b9b9829bfd0eb8818.png

     

    adicionado 7 minutos depois

    você precisa limpar o buffer antes de ler strings ou chars...
    Deveria buscar alguns tutoriais de como limpar o buffer em C para aprender a faze-lo corretamente. A forma mais fácil é pondo o fflush(stdin) mas nao lhe recomendo fazer isso,tTem comportamento indefinido... pode sair um dragão na sua tela. >_<

    • Curtir 1
    • Amei 1
  9. ok... arrume isso então hehe, sobre tudo onde tiver lendo e imprimindo esses nifs

    adicionado 0 minutos depois

    talvez seja interessante guardar o nif em uma string

    adicionado 3 minutos depois

    assim você pode tomar os dados desse jeito"000.000.000-00"

    adicionado 4 minutos depois

    é só uma ideia hehe

    adicionado 8 minutos depois

    É preciso usar malloc para alocar uma única estrutura em main?

    adicionado 8 minutos depois

    Em todo caso o tipo do ponteiro deveria ser struct Funcionario * e n int

    adicionado 9 minutos depois

    se malloc retorna struct Funcionario * você precisa de um ponteiro igual(struct Funcionario* p)

     

    adicionado 12 minutos depois

    Dentro da função EliminarFuncionario...

    printf ( "\n\tNome: %s", funcionario[i].nome );

     

    O i, não tem valor inicial, essa chamada pode bugar seu programa. O correto é int nif, i=0;

    adicionado 14 minutos depois

    nessa mesma função EliminarFuncionario você recebe um int n por parâmetro porém n usa isso para nada, não é erro mas da um aviso.

    adicionado 15 minutos depois

    arrumando esses "errinhos" seu programa fica com quase zero avisos. Agora vou provar a parte lógica a ver si funciona como o devido...

    • Curtir 1
    • Amei 1
  10. porque aqui na hora de ler ta perguntando em qual dos 20 nifs fazer a inserção...

    scanf ( "%d", &funcionario[i].NIF );

    o programa pensa que são 20 nifs então você teria:

    scanf ( "%d", &funcionario[0].NIF );
    
    scanf ( "%d", &funcionario[1].NIF );
    
    scanf ( "%d", &funcionario[2].NIF );
    ...
    scanf ( "%d", &funcionario[19].NIF );

     

    adicionado 0 minutos depois

    @Andrah Correto...! Agora você pode chamar qualquer função desde qualquer função >_<

    • Curtir 1
    • Amei 1
  11. você esqueceu por o prototipo da função menu antes de main. Em C/C++ tudo o que for usado deve estar declarado antes, a implementação você pode levar para outro lugar, incluindo outro arquivo.

    continuo...
     

    adicionado 4 minutos depois

    ok... tem mais problemas. Um momento hehe

    adicionado 5 minutos depois

    na função IncerirFuncionario você chama ao menu, e antes de IncerirFuncionario não existe menu, somente ponha

    void menu ( struct Funcionario funcionario[], int n )

    antes da função

    adicionado 6 minutos depois

    Ja estudou sobre protótipos de funções? Lhe ajudará evitar esses "erros"

    adicionado 8 minutos depois
    Spoiler

    Screenshot_6.png.fbc21880caa548d8f3a779967bf99a78.png

     

    adicionado 12 minutos depois

    se você for ler strings não ponha & adiante:

    scanf ( " %s", &funcionario[i].nome ); //<- tire o &.


    Regra de ouro... NUNCA POR & ADIANTE DE STRINGS OU PONTEIROS. Como ponteiros é muito raro que você use scanf para atribuir valor ao menos lembre de n por & adiante de strings... "NUNCA". 😆 Isso arruma um montão de avisos

    Para ler o nome do funcionario basta:

    scanf ( " %s", funcionario[i].nome );

     

    adicionado 14 minutos depois

    Aqui:
    Screenshot_3.png.ffa3149938d98a54743104510187cd78.png

     

    O usuario tem 20 NIFs?

    • Curtir 1
    • Amei 1
  12. 2 horas atrás, Udson Blatt de Souza disse:

    Crie um programa que leia a quantidade de alunos e os divida em duplas, juntando o primeiro com o último, o segundo com o penúltimo e assim sucessivamente. Se houver um número ímpar de alunos, um deles ficará sozinho.

    Por favor me ajudem aí de forma simples pois sou novo nessa área ainda.

    sabe pegar os dados ao menos?

  13. 3 horas atrás, arfneto disse:

    Esse ambiente não é atualizado com frequência :) como vê...

    você não pode estar mais errado XD-> Code::Blocks Nightly Builds


    Uso codeblocks 20.03 com seu compilador incluído por default. Contei que era o 8.2 mas é o 8.1(Erro meu). Mas o erro da em todas as versões que provei. Levo provando versões desde 2011 mais ou menos, e lembro que naqueles tempos rodava as 4.X, e os long long int %lld sempre foi um incomodo, por isso acredito que não seja um erro si não algo que ignoro por completo, porque leva muitos anos igual e não acredito que sejam tão burros como eu. Por antanho ainda rodava o XP. >_<
    Screenshot_2.png.b7226f96d8d80cc476c310631077bdad.png

     

    3 horas atrás, arfneto disse:

    Podia ter perguntado em qual versão foi compilado o exemplo pelo autor do post. Seria o simples. Era o CL 19.25 o compilador

    você falou que usa visual studio anteriormente, e em alguns casos outros ambientes/compiladores, então omiti essa pergunta, porque para mim é óbvio que nesse ambiente da Microsoft, n ta dando erro.

     

    3 horas atrás, arfneto disse:

    Se não mudou a versão do compilador ou não instalou outro, já sabe qual teria: 5.1 até 19 de março ou 8.2.

    não...! Não mudei uso codeblocks 20.03 com o compilador que traz por defaut(8.1).

    Confesso que é coisa temporal porque quase sempre enlaço codeblocks com o ultimo mingw-w64 disponível aqui->https://sourceforge.net/projects/mingw-w64/files/

     

    Mas como você pode ver, codeblocks traz um compilador igual(mesma versão), então de momento estou com codeblocks 20.03 com compilador por default, que é o 8.1. Estou esperando se vai sair a versão 9, pois no tdm gcc ja traz, se demorar instalo o tdm gcc mesmo.

     

    4 horas atrás, arfneto disse:

    Não. Não é. Apenas o ambiente de trabalho no Windows. E por isso evito mudanças. Ou usar máquinas que tenham coisas de clientes.

    Sei que o visual studio é mais aceitado no mundo empresarial, mas como só uso compiladores e esses tipos de programa a modo de estudo fico com codeblocks pois estou mais acostumado com ele. Um dia talvez migre porém n sei se vou para o visual studio.

     

    4 horas atrás, arfneto disse:

    Não tenho problemas com elas mesmo. Mas não tenho problemas no Windows também.

    Isso porque você ainda n compilou seu programa com mingw né. 🤣

  14.  

    6 horas atrás, isrnick disse:

    Provavelmente é a versão do compilador que você está usando, ou alguma flag de compilação que está usando.

    Estou usando o ultimo codeblocks(oficial). Suponho que seja das ultimas versões de mingw.

    Sobre os flags de compilação são os normais:
    Screenshot_1.png.f009241cc6134f61ec7b1863a422a115.png

    adicionado 8 minutos depois
    6 horas atrás, isrnick disse:

    erifique que está com flag de versão da linguagem para C99 ou mais recente (ex: -std=c99 , ou -std=gnu11 , ou -std=c11 , etc), o meu está com -std=gnu11 .

    falha tanto com -std=c11 como -std=c99, mas funciona com o define -D__USE_MINGW_ANSI_STDIO=1

    adicionado 9 minutos depois

    não sei que compiladores vcs tão usando mas com mingw isso gera avisos.

    adicionado 22 minutos depois
    5 horas atrás, arfneto disse:

    Nenhum comentário? 

    Não sei o que dizer😆

     

    5 horas atrás, arfneto disse:

    Não rodou em sua máquina?

    Rodar roda, são "apenas" avisos.
     

    5 horas atrás, arfneto disse:

    Se está preocupado com os warnings mude o tipo do parâmetro em seu arquivo.  Eu me prometi usar sempre o mesmo ambiente quando uso o forum, e não usar outros compiladores. Apesar de não me importar muito com Warnings meu compilador parece satisfeito com esseE aqui roda sem problemas. Uso sempre Windows 10 e Visual Studio 

    Continuo sem saber o que lhe digo. Somente que uso codeblocks conjunto mingw(quase sempre a ultima versão).

     

    5 horas atrás, arfneto disse:

    Claro que em tempos de confinamento e para checar uma dúvida de um usuário aqui acabei instalando um certo Dev-C++

    🤮

     

    5 horas atrás, arfneto disse:

    e um Code::Blocks e gcc 5.1 e 8.2

    8.2 é o que uso atualmente já que vem com codeblocks agora mesmo.
     

    5 horas atrás, arfneto disse:

    Mas daí a eu usar será outro passo...

    gostos... questão de gostos
     

    5 horas atrás, arfneto disse:

    Tenho máquinas Linux aqui. Meu servidor VOIP fica na mesma mesa até e roda Centos. Tem SUSE e UBUNTU no WSL, tem o bd com UBUNTU 18 ou 17 sei lá, mas não quero mexer nessas máquinas.

    Nem lhe aconselho... sei que em linux vai tudo como a seda.

     

    5 horas atrás, arfneto disse:

    Mas talvez fosse legal usar só Linux e gcc e postar os programas e o makefile como nos velhos tempos. Exceto que nos velhos tempos não tinha esse lance de postar :D 

    Boa hehe 👍

    Com o -D__USE_MINGW_ANSI_STDIO=1 que me indicou o @isrnickfuncionou certinho. Mas sempre gosto de soluçoes mais ortodoxa >_<

    adicionado 27 minutos depois

    unknown.png.93f6546553bfb7f0ad3617e5a51a1410.png
    Solução do @isrnick

    • 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!