Ir ao conteúdo

C bug pos gets/fgets em c


Ir à solução Resolvido por devair1010,

Posts recomendados

Postado

Resumindo meu problema:
Estou começando um prototipo de uma atividade da minha faculdade, é basicamente criar um cadastro e depois ter uma opção de buscar esse cadastro.
Problema é, logo no começo, como podem ver no codigo abaixo, ele ja esta dando um bug que eu não consegui encontrar a solução em canto nenhum da internet.
Ja tentei com gets e fgets, da sempre o mesmo resultado.
Nota: Quando se usa poucos caracteres em "fgets (cadastro[i].nome, 50, stdin);" o programa continua normalmente.
Agradeço desde ja a ajuda, estou a uns dias quebrando a cabeça nisso e pra ajudar meu professor não responde meu e-mail.

image.png.36c5c25afbb4d2308ec7b354c986f0f5.png

image.png.bd7cc2588a284220832cf78fdbf11879.png

<
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct vacina{
    int codigo;
    char nome[50];
    char cpf[20];
    char vacina[30];
    char data[12];
    int lote;
};
int i, j, k;
i=0;
int main(){
    struct vacina cadastro[i];
    printf ("Seja bem vindo ao sistema, digite um valor para ser redirecionado a sua respectiva funcao: \n");
    do
    {
        printf ("1: Cadastrar uma nova ficha.\n");
        printf ("2: Buscar uma ficha ja cadastrada.\n");
        printf ("Outro valor: Sair do sistema.\n");
        scanf ("%d", &k);
        if (k==1){
            fflush(stdin);
            printf ("Digite os dados do cadastro conforme solicitado: \n");
            cadastro[i].codigo = i;
            printf ("Nome completo:");
            fgets (cadastro[i].nome, 50, stdin);
            printf ("CPF: ");
            fgets (cadastro[i].cpf, 20, stdin);
            printf ("Nome da vacina: ");
            fgets (cadastro[i].vacina, 30, stdin);
            printf ("Data da vacinação: ");
            fgets (cadastro[i].data, 12, stdin);
            printf ("Lote da vacina: ");
            scanf ("%d", &cadastro[i].lote);
            printf ("\n=====================================================\n \n");
            i++;    
        }
        if (k==2){
        
        }
    }
    while (k==1 || k==2);
    return 0;    
}

>

  • Obrigado 1
Postado

 

Use o botão code como explicado no primeiro post desse forum:

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct vacina{
    int codigo;
    char nome[50];
    char cpf[20];
    char vacina[30];
    char data[12];
    int lote;
};
int i, j, k;
i=0;
int main(){
    struct vacina cadastro[i];
    printf ("Seja bem vindo ao sistema, digite um valor para ser redirecionado a sua respectiva funcao: \n");
    do
    {
        printf ("1: Cadastrar uma nova ficha.\n");
        printf ("2: Buscar uma ficha ja cadastrada.\n");
        printf ("Outro valor: Sair do sistema.\n");
        scanf ("%d", &k);
        if (k==1){
            fflush(stdin);
            printf ("Digite os dados do cadastro conforme solicitado: \n");
            cadastro[i].codigo = i;
            printf ("Nome completo:");
            fgets (cadastro[i].nome, 50, stdin);
            printf ("CPF: ");
            fgets (cadastro[i].cpf, 20, stdin);
            printf ("Nome da vacina: ");
            fgets (cadastro[i].vacina, 30, stdin);
            printf ("Data da vacinação: ");
            fgets (cadastro[i].data, 12, stdin);
            printf ("Lote da vacina: ");
            scanf ("%d", &cadastro[i].lote);
            printf ("\n=====================================================\n \n");
            i++;    
        }
        if (k==2){
        
        }
    }
    while (k==1 || k==2);
    return 0;    
}

Seu programa não está bom. Comece por tirar todas essas variáveis que estão fora de main() 

 

Ao ler um valor escreva de volta na tela o valor lido para estar certo de que as coisas são o que você gostaria, enquanto está aprendendo.

 

Evite scanf() por enquanto ou ou leia o manual ao menos... Essa função não foi escrita para ler dados do teclado.

 

Prefira fgets() e leia a linha inteira e mostre na tela. Depois converta o que precisar para numero

 

Entenda que um printf() de várias linhas é muito mais espero que vários printf(0 de 1 linha.

 

 

  • Obrigado 2
Postado

@arfnetoObrigado, vou seguir seu conselho e ver se resolve o problema. Só me tire uma duvida se possível, como eu faço para digitar uma variavel do tipo inteiro ou float sem o scanf?

3 minutos atrás, arfneto disse:

 

Use o botão code como explicado no primeiro post desse forum:

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct vacina{
    int codigo;
    char nome[50];
    char cpf[20];
    char vacina[30];
    char data[12];
    int lote;
};
int i, j, k;
i=0;
int main(){
    struct vacina cadastro[i];
    printf ("Seja bem vindo ao sistema, digite um valor para ser redirecionado a sua respectiva funcao: \n");
    do
    {
        printf ("1: Cadastrar uma nova ficha.\n");
        printf ("2: Buscar uma ficha ja cadastrada.\n");
        printf ("Outro valor: Sair do sistema.\n");
        scanf ("%d", &k);
        if (k==1){
            fflush(stdin);
            printf ("Digite os dados do cadastro conforme solicitado: \n");
            cadastro[i].codigo = i;
            printf ("Nome completo:");
            fgets (cadastro[i].nome, 50, stdin);
            printf ("CPF: ");
            fgets (cadastro[i].cpf, 20, stdin);
            printf ("Nome da vacina: ");
            fgets (cadastro[i].vacina, 30, stdin);
            printf ("Data da vacinação: ");
            fgets (cadastro[i].data, 12, stdin);
            printf ("Lote da vacina: ");
            scanf ("%d", &cadastro[i].lote);
            printf ("\n=====================================================\n \n");
            i++;    
        }
        if (k==2){
        
        }
    }
    while (k==1 || k==2);
    return 0;    
}

Seu programa não está bom. Comece por tirar todas essas variáveis que estão fora de main() 

 

Ao ler um valor escreva de volta na tela o valor lido para estar certo de que as coisas são o que você gostaria, enquanto está aprendendo.

 

Evite scanf() por enquanto ou ou leia o manual ao menos... Essa função não foi escrita para ler dados do teclado.

 

Prefira fgets() e leia a linha inteira e mostre na tela. Depois converta o que precisar para numero

 

Entenda que um printf() de várias linhas é muito mais espero que vários printf(0 de 1 linha.

 

 

 

  • Obrigado 1
Postado
13 minutos atrás, João Vitor Cegatto disse:

Obrigado, vou seguir seu conselho e ver se resolve o problema. Só me tire uma duvida se possível, como eu faço para digitar uma variavel do tipo inteiro ou float sem o scanf?

 

juntando isso com o que eu disse

 

17 minutos atrás, arfneto disse:

Prefira fgets() e leia a linha inteira e mostre na tela. Depois converta o que precisar para numero

 

converta com atoi() atod() e tal. É mais simples e mais seguro porque fgets() retorna NULL se não ler nada, mas pode ler a linha toda e não precisa se preocupar com os '\n' que scanf() não consome normalmente.

 

scanf() é uma função muito esperta e serve para consumir dados tabulares, no popular tabelas. scan formatted Input é a origem do nome... Só que o teclado não é formatado, nem perto disso: são ao menos 105 teclas de grande liberdade. Então nem sempre as coisas saem como se espera quando se está começando.

 

E não sei como ensinam isso mas é óbvio que não reforçam o fato de que

  • scanf() retorna um int
  • não ler nada não é um erro para scanf()
  • não ler tudo também não é um erro para scanf(). Basta ler o suficiente e a função retorna

Eu queria mesmo assistir a uma aula onde ensinam isso ou ver uma apostila. Não pode ser que ensinam sempre certo e as pessoas SEMPRE escrevem errado. Você não testou o retorno de scanf() em lugar algum de seu programa, por exemplo. E programas de estudo são ótimos: você sempre pode cancelar no primeiro erro. Desde que teste por ele. Qual o propósito de seguir com a leitura se não ler por exemplo o número de um lote?

 

 

 

 

 

 

 

 

  • Curtir 1
  • Obrigado 2
  • Solução
Postado

@João Vitor Cegatto   usando a função  atoi , "Array to int"  , ou   atof  ,  "Array to float" ,   e seu vetor para a struct foi criada contendo o valor zero de elemento , e dará algum tipo de erro ,  e seu código ficaria assim  :

#include <stdio.h>
#include <string.h>
struct vacina
{
    int  codigo    ;
    char nome  [50];
    char cpf   [20];
    char vacina[30];
    char data  [12];
    int  lote      ;
};
int i=0, j, k;               /// variavel  i vale zero
int main()
{
  char str[20];
  struct vacina cadastro[i]; /// o vetor de struct ,cadastro ,
                             /// terá zero elementos ou seja nenhum !
                             /// assim não vai armazenar
  printf ("Seja bem vindo ao sistema,\n\
           \rdigite um valor para ser redirecionado\n\
           \ra sua respectiva funcao :\n\
           \r\tMenu\n");
  do
  {
    printf(" 1 : Cadastrar uma nova ficha.      \n");
    printf(" 2 : Buscar uma ficha ja cadastrada.\n");
    printf("     Outro valor: Sair do sistema.  \n");
    /// scanf ("%d", &k);
    fgets(str , sizeof(str) , stdin);
    k = atoi(str);
    printf("valor de K= %d\n",k);
  }while(k==1||k==2);
  return 0;
}

 

  • Curtir 1
  • Obrigado 1
Postado

@João Vitor Cegatto

43 minutos atrás, João Vitor Cegatto disse:

@arfneto @devair1010 obrigado a vocês dois, consegui aprender bastante sobre C e corrigir meu programa.
Vou marcar o post como solucionado, caso estiverem com duvida sobre qual material estou usando, vou disponibilizar o PDF para darem uma olhada.
https://*****/file/3IkWmbpR#wHVKR_qozZzDLpFSOq2Z9qJOQZ04gHmErAWVwioVbU0

 

Obrigado por deixar o PDF disponível. Eu li o artigo.

 

Recomendo muito você usar algum livro de referência se seu curso não tem um livro texto além desse que citou. 

 

Claro que é só minha opinião, mas eu li o material e é bem ruim.

  • Começa por coisas que sequer são verdade --- como a origem de C. O texto  diz que a linguagem foi criada para o sistema operacional Unix quando na verdade foi escrita antes, para acelerar o desenvolvimento de coisas nos laboratórios Bell, em especial um sistema operacional que depois passou a ser chamado Unix.
  • Introduz funções sem protótipo (a própria palavra só aparece pela primeira vez na página 171 de 208), explica errado o que é constante e o que é um #define.
  • explica errado a diferença e sequer explica a razão de existirem system includes e user includes, os tais #include <> e #include "".
  • O exemplo e a discussão sobre ordenação de vetores é um desastre. E bubble sort sequer é o método mais conhecido de ordenação. Mesmo crianças ainda nem alfabetizadas tem noção de ordem e usam  o método de inserção para isso, com cartas, com blocos de madeira ou brinquedos. E adultos que nada entendem de métodos ou C usam bubble sort? Não. Usam insertion sort intuitivamente.
  • o exemplo de bubble sort tem a cara de pau de deixar duas variáveis com os incríveis nomes de i e j globais em main, ao invés de declarar no próprio comando for.

Recomendo muito usar essa apostila com desconfiança e buscar algum outro material de referência.

 

 

 

  • Curtir 1
  • Obrigado 1
Postado

 

27 minutos atrás, arfneto disse:

@João Vitor Cegatto

 

Obrigado por deixar o PDF disponível. Eu li o artigo.

 

Recomendo muito você usar algum livro de referência se seu curso não tem um livro texto além desse que citou. 

 

Claro que é só minha opinião, mas eu li o material e é bem ruim.

  • Começa por coisas que sequer são verdade --- como a origem de C. O texto  diz que a linguagem foi criada para o sistema operacional Unix quando na verdade foi escrita antes, para acelerar o desenvolvimento de coisas nos laboratórios Bell, em especial um sistema operacional que depois passou a ser chamado Unix.
  • Introduz funções sem protótipo (a própria palavra só aparece pela primeira vez na página 171 de 208), explica errado o que é constante e o que é um #define.
  • explica errado a diferença e sequer explica a razão de existirem system includes e user includes, os tais #include <> e #include "".
  • O exemplo e a discussão sobre ordenação de vetores é um desastre. E bubble sort sequer é o método mais conhecido de ordenação. Mesmo crianças ainda nem alfabetizadas tem noção de ordem e usam  o método de inserção para isso, com cartas, com blocos de madeira ou brinquedos. E adultos que nada entendem de métodos ou C usam bubble sort? Não. Usam insertion sort intuitivamente.
  • o exemplo de bubble sort tem a cara de pau de deixar duas variáveis com os incríveis nomes de i e j globais em main, ao invés de declarar no próprio comando for.

Recomendo muito usar essa apostila com desconfiança e buscar algum outro material de referência.

 

 

 

Pretendo seguir seu conselho, tem algum material que voce possa me recomendar? (seja vídeo aulas online ou livros)

  • Obrigado 1
Postado

Não sou a pessoa certa para indicar essas coisas mas um livro fácil de considerar

 

https://www.amazon.com.br/gp/product/B00MTUNHDQ/ref=dbs_a_def_rwt_bibl_vppi_i0

 

de 2014. 

 

Claro, o "livro branco" de K&R é o clássico, https://www.amazon.com.br/Programming-Language-PROGRAMMING-LANG-English-ebook/dp/B009ZUZ9FW/ref=sr_1_3?__mk_pt_BR=ÅMÅŽÕÑ&crid=2R1CQIRJBITBD&keywords=kernighan&qid=1652814553&sprefix=kernigham%2Caps%2C194&sr=8-3 de '88

 

Acho que livros com um propósito são mais legais de usar, como outro clássico 

Estruturas de Dados Usando C 

 

Um curso online clássico no mundo inteiro é o CS50 de Harvard que pode ser grátis. A plataforma Udemy tem cursos de tudo a preços baixos, mas não sei sobre os cursos de C

 

MIT Open CourseWare é uma iniciativa impressionante com aulas online grátis direto dessa escola que tem, digamos, um certo status também.  link para um curso de C  lá

 

 

 

 

  • Curtir 1
  • Amei 1
Postado

Fui continuar o programa e um erro bem semelhante apareceu, poderia me dar uma luz?
Dei uma pesquisada e vi algumas pessoas aconselhando usar o debug para encontrar o motivo do erro, mas não consegui entender muito bem o que significava o codigo de erro.
image.png.007d4a3c3ecaca60b83f014b357f017c.png

codigo abaixo (juro que procurei o lugar pra colocar o comando de <> conforme mostra o primeiro topico deste forum, mas não encontrei)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct vacina
{
    int  codigo  ;
    char nome[50];
    char cpf [20];
    char tipo[30];
    char data[12];
    int  lote    ;
};
int main(void)
{
    int i=0, j, k;
    printf ("%d", i);            
    char str[20];
    struct vacina cadastro[i];                            
    printf ("Seja bem vindo ao sistema,\n\
           \rdigite um valor para ser redirecionado\n\
           \ra sua respectiva funcao :\n\
           \r\tMenu\n");
    do
    {
        printf(" 1 : Cadastrar uma nova ficha.      \n");
        printf(" 2 : Buscar uma ficha ja cadastrada.\n");
        printf("     Outro valor: Sair do sistema.  \n");
        fgets(str , sizeof(str) , stdin);
        k = atoi(str);
        printf("valor de K= %d\n",k);
            if (k==1)
            {
                fflush(stdin);
                printf ("Digite os dados do cadastro conforme solicitado: \n");
                cadastro[i].codigo = i;
                printf ("%d\n", cadastro[i].codigo);
                printf ("Nome completo:");
                fgets (cadastro[i].nome, 50, stdin);
                printf ("%s\n", cadastro[i].nome);
                printf ("CPF:");
                fgets (cadastro[i].cpf, 20, stdin);
                printf ("%s\n", cadastro[i].cpf);
                printf ("Nome da vacina: ");
                fgets (cadastro[i].tipo, 30, stdin);
                printf ("%s\n", cadastro[i].tipo);
                printf ("Data da vacinação: ");
                fgets (cadastro[i].data, 12, stdin);
                printf("%s\n", cadastro[i].data);
                printf ("Lote da vacina: ");
                fgets(str, sizeof(str), stdin);
                printf ("%s", str);
                cadastro[i].lote = atoi (str);
                printf ("\n=====================================================\n \n");
                i++;
            }
    }while(k==1||k==2);
    return 0;
}
 

image.png

Obs: Tentei preencher os valores utilizando variaveis em matrizes ao invés de utilizar uma struct e funcionou sem problemas.

Postado
4 minutos atrás, João Vitor Cegatto disse:

codigo abaixo (juro que procurei o lugar pra colocar o comando de <> conforme mostra o primeiro topico deste forum, mas não encontrei)

 

tentou ler o primeiro post do forum?

 

//https :  // www.clubedohardware.com.br/forums/topic/
// //1599089-bug-pos-getsfgets-em-c/#comment-8405899

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct vacina
{
    int  codigo;
    char nome[50];
    char cpf[20];
    char tipo[30];
    char data[12];
    int  lote;
};

int main(void)
{
    int i = 0, j, k;
    printf("%d", i);
    char          str[20];
    struct vacina cadastro[i];
    printf(
        "Seja bem vindo ao sistema,\n\
           \rdigite um valor para ser redirecionado\n\
           \ra sua respectiva funcao :\n\
           \r\tMenu\n");
    do {
        printf(" 1 : Cadastrar uma nova ficha.      \n");
        printf(" 2 : Buscar uma ficha ja cadastrada.\n");
        printf("     Outro valor: Sair do sistema.  \n");
        fgets(str, sizeof(str), stdin);
        k = atoi(str);
        printf("valor de K= %d\n", k);
        if (k == 1)
        {
            fflush(stdin);
            printf(
                "Digite os dados do cadastro conforme "
                "solicitado: \n");
            cadastro[i].codigo = i;
            printf("%d\n", cadastro[i].codigo);
            printf("Nome completo:");
            fgets(cadastro[i].nome, 50, stdin);
            printf("%s\n", cadastro[i].nome);
            printf("CPF:");
            fgets(cadastro[i].cpf, 20, stdin);
            printf("%s\n", cadastro[i].cpf);
            printf("Nome da vacina: ");
            fgets(cadastro[i].tipo, 30, stdin);
            printf("%s\n", cadastro[i].tipo);
            printf("Data da vacinação: ");
            fgets(cadastro[i].data, 12, stdin);
            printf("%s\n", cadastro[i].data);
            printf("Lote da vacina: ");
            fgets(str, sizeof(str), stdin);
            printf("%s", str);
            cadastro[i].lote = atoi(str);
            printf(
                "\n========================================"
                "=============\n \n");
            i++;
        }
    } while (k == 1 || k == 2);
    return 0;
}

 

Seu programa não está nada bom.

 

Notou as mensagens do compilador?

 

    int i = 0, j, k;
    printf("%d", i);
    char          str[20];
    struct vacina cadastro[i];

 

Isso não existe em C. O tamanho do array precisa ser conhecido quando compila o programa. Não pode ser lido depois quando o programa já está rodando. Antes que alguém diga o contrário, VLA em C é mais uma curiosidade que agrada alunos do que algo sério e não aparece em nenhum programa importante que eu tenha visto.

 

Não mudou nada do que eu sugeri. Sua opção, claro.

 

 

 

 

 

 

Postado

@arfneto sim, li o primeiro post, mas realmente não encontrei a opção.

image.png.84a806960af636eeb79299dc8c600476.png

Sobre os arrays, eu não sabia que precisava ser conhecido logo quando se complica, sobre isso, como faço para declarar um array que eu não sei a quantia exata de valores que vai ser colocado dentro dele?
No mais, fiz o que voce sugeriu nessa resposta, perdão se interpretei algo da forma errada ou deixei passar alguma informação.

23 horas atrás, arfneto disse:

 

Use o botão code como explicado no primeiro post desse forum:

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct vacina{
    int codigo;
    char nome[50];
    char cpf[20];
    char vacina[30];
    char data[12];
    int lote;
};
int i, j, k;
i=0;
int main(){
    struct vacina cadastro[i];
    printf ("Seja bem vindo ao sistema, digite um valor para ser redirecionado a sua respectiva funcao: \n");
    do
    {
        printf ("1: Cadastrar uma nova ficha.\n");
        printf ("2: Buscar uma ficha ja cadastrada.\n");
        printf ("Outro valor: Sair do sistema.\n");
        scanf ("%d", &k);
        if (k==1){
            fflush(stdin);
            printf ("Digite os dados do cadastro conforme solicitado: \n");
            cadastro[i].codigo = i;
            printf ("Nome completo:");
            fgets (cadastro[i].nome, 50, stdin);
            printf ("CPF: ");
            fgets (cadastro[i].cpf, 20, stdin);
            printf ("Nome da vacina: ");
            fgets (cadastro[i].vacina, 30, stdin);
            printf ("Data da vacinação: ");
            fgets (cadastro[i].data, 12, stdin);
            printf ("Lote da vacina: ");
            scanf ("%d", &cadastro[i].lote);
            printf ("\n=====================================================\n \n");
            i++;    
        }
        if (k==2){
        
        }
    }
    while (k==1 || k==2);
    return 0;    
}

Seu programa não está bom. Comece por tirar todas essas variáveis que estão fora de main() 

 

Ao ler um valor escreva de volta na tela o valor lido para estar certo de que as coisas são o que você gostaria, enquanto está aprendendo.

 

Evite scanf() por enquanto ou ou leia o manual ao menos... Essa função não foi escrita para ler dados do teclado.

 

Prefira fgets() e leia a linha inteira e mostre na tela. Depois converta o que precisar para numero

 

Entenda que um printf() de várias linhas é muito mais espero que vários printf(0 de 1 linha.

 

 

 

image.png

Postado
27 minutos atrás, João Vitor Cegatto disse:

Sobre os arrays, eu não sabia que precisava ser conhecido logo quando se complica, sobre isso, como faço para declarar um array que eu não sei a quantia exata de valores que vai ser colocado dentro dele?

 

Não me surpreende considerando seu livro escrito por seus professores e que não menciona isso. Talvez eles achem que não seja importante.

 

Se só via saber o valor quando o programa está rodando use alocação dinâmica chamando a função malloc declarada em  stdlib.h

 

27 minutos atrás, João Vitor Cegatto disse:

No mais, fiz o que voce sugeriu nessa resposta, perdão se interpretei algo da forma errada ou deixei passar alguma informação

 

fgets() retorna um ponteiro que não tratou. Se não ler nada retorna NULL. Todo dia centenas de programas de estudantes cancelam por não testar o retorno de fgets(). Ou entram em loop, o mais comum. 

 

34 minutos atrás, arfneto disse:
 fflush(stdin);

 

para que isso? fflush() só está definido para saída.

 

34 minutos atrás, arfneto disse:
        printf(" 1 : Cadastrar uma nova ficha.      \n");
        printf(" 2 : Buscar uma ficha ja cadastrada.\n");
        printf("     Outro valor: Sair do sistema.  \n");

 

porque 3 chamadas a printf() ?

 

EXEMPLO

 

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

typedef struct
{
    int  codigo;
    char nome[50];
    char cpf[20];
    char tipo[30];
    char data[12];
    int  lote;
}   Vacina;

void exemplo(Vacina*,int);
void preenche(Vacina*, int);

int main(void)
{
    int i = 12;
    Vacina* teste = (Vacina*)malloc(i * sizeof(Vacina));
    preenche(teste, i);
    exemplo(teste, i);
    free(teste);
    return 0;
}

void preenche(Vacina* v, int qtd)
{
    for (int i = 0; i < qtd; i += 1) v[i].lote = i;
    return;
}

void exemplo(Vacina* v, int qtd)
{
    printf(
        "\
    Lote da primeira vacina: %d\n\
    Lote da ultima   vacina: %d\n\
    [%d lotes]\n",
        v[0].lote, v[qtd - 1].lote, qtd);
    return;
}

 

Esse exemplo mostra como usar um vetor de vacinas...

 

mostra

 

    Lote da primeira vacina: 0
    Lote da ultima   vacina: 11
    [12 lotes]

 

Seu livro é fraco. Muito fraco. E nada explica sobre isso exceto por recomendar um livro, n pag. 142:
 

Citação

C Completo e Total
Autor: Herbert Schildt
Editora: Makron
Ano: 1997
Sinopse: C Completo e Total está dividido em cinco partes, cada
uma abordando um aspecto importante de C. Parte 1: apresenta
uma discussão detalhada da linguagem C, incluindo palavras-
-chave, tipos de dados, operadores, funções, ponteiros, E/S, alocação dinâmica e
muito mais. Parte 2: apresenta uma extensa descrição das funções de biblioteca
por categoria. Abrange as funções definidas pelo padrão ANSI e muitas extensões
comuns, como as chamadas de arquivos Unix, os gráficos e as funções de interface
com o sistema operacional. Parte 3: mostra como aplicar C, concentrando-se
em algoritmos úteis e aplicações interessantes da linguagem C. Parte 4: trata do
ambiente de desenvolvimento C, incluindo eficiência, portabilidade, depuração e
interface com o código assembler. Parte 5: desenvolve um interpretador C, com
vários e diversificados exemplos que esclarecem cada conceito apresentado neste
livro e que o diferenciam de qualquer outra obra de referência sobre C.

 

Acho que eu li esse livro. Não recomendo, mas seus professores sim. Eles devem saber melhor. Ou não.

 

Rode o exemplo em sua máquina

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