1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Duvidas De C

Discussão em 'Programação' iniciada por TNTiago, 1 de Maio de 2007. (Respostas: 25; Visualizações: 1606)

  1. TNTiago

    TNTiago Power Member

    olá eu tenho algumas dúvidas ao utilizar

    typedef struct{
    int numero;
    char nome[20];
    }aluno;

    typedef aluno turma[50]; *\qual é a diferença entre estas duas linhas\* aluno turma[50];


    para que serve " -> "

    fgets(aluno->nome,MAXNOME,stdin);

    gostaria que me explicassem como isto funciona, obrigado...
     
  2. raVemjr

    raVemjr I'm cool cuz I Fold

    Imagina que ptr é um ponteiro para uma estrutura aluno...para acederes à componente nome dessa estrutura a sintaxe "simples" seria (*ptr).nome (componente nome do apontado de ptr).
    Ao invé de escreveres isso tudo, podes fazer ptr->aluno, e obter o mesmo.

    Das duas, se é que percebi a tua dúvida...é "aluno turma[50];"...na primeira estavas a definir um novo tipo de dados aluno(que ia dar barraca logo aí) e depois metes um vector a seguir "à pape-seco"...
     
    Última edição: 1 de Maio de 2007
  3. TNTiago

    TNTiago Power Member

    a minha ideia era criar uma extrutura com numero de aluno e nome, e poder guardar a informação de por exemplo 50 alunos, pode-me ajudar
     
  4. raVemjr

    raVemjr I'm cool cuz I Fold

    Então está certo... fazes aluno turma[50]; e crias assim um vector de 50 alunos...

    Mais alguma dúvida é só perguntar...
     
  5. TNTiago

    TNTiago Power Member

    qual é o probelema nestas linhas de código?
    o meu ambiente é o DEV C++, mas com ficheiro em C apenas...


    #include<stdio.h>
    #include<conio.h>
    #define MAXNOME 20
    #define MAXALUNO 5

    typedef struct{
    int numero;
    char nome[MAXNOME];
    }aluno;


    int main ()
    {

    int nalunos=0;

    aluno turma[MAXALUNO];

    do{
    printf("qual o numero?");
    scanf("%d",turma[nalunos].numero);

    printf("qual o nome?");
    scanf("%s",turma[nalunos].nome);

    nalunos++;
    }while (nalunos<MAXALUNO);

    for(nalunos=0;nalunos<MAXALUNO;nalunos++)
    {
    printf("%d%s",turma->numero,turma->nome);
    }


    getch();
    return;
    }
     
  6. raVemjr

    raVemjr I'm cool cuz I Fold

    Pelo que vi, ACHO que está tudo bem, com a excepção do último for: mete "turma[nalunos].numero" e "turma[nalunos].nome" ao invés de usares ->

    Se não resultar, diz-me os erros de compilação, o que meteste e saiu.

    Aconselho-te a usar Linux. Eu já nem sequer consigo programar C em Windows, booto sempre o meu Ubuntu :D Se vais para informática até te faz bem ires mexendo nele...

    EDIT: BTW, o qué é que o getch faz?

    EDIT2: Agora é que reparei, ou apagas o return e tiras o int do main, ou tens que o meter a retornar um numero qualquer...
     
    Última edição: 1 de Maio de 2007
  7. Cesaria

    Cesaria Power Member

    Sim o raVemjr tem razão tens de ter atenção ao ultimo for e ao que retornas na função main..Além disso reparei uma falha na leitura do numero, tens de inserir o &, ou seja
    scanf("%d",&turma[nalunos].numero);
     
  8. TNTiago

    TNTiago Power Member

    o getch(); espera que carregues em alguma techa para fechar a aplicação.

    o problema é o seguinte:
    Qual o numero? 12
    qual o nome? tiago
    qual o numero? 13
    a segui a isto o programa está a tentar escrever em algum endereço de memória protegido, pois aparece um erro de windows dizendo que vai fechar a aplicação...
     
  9. TNTiago

    TNTiago Power Member

    olha o probelam foi descobeto por cesaria pois faltava mesmo o &....

    faz mesmo o que eu queria...
    se eu tiver mais duvidas vou pondo aqui.
    obrigado por toda a atenção....
     
    Última edição: 1 de Maio de 2007
  10. Cesaria

    Cesaria Power Member

    Any time ;), tamos aqui mm para nos entre ajudar :)
     
  11. TNTiago

    TNTiago Power Member

    mais uma dúvida a difereça entre o scanf() e o fgets () é apenas que o fgets limita o numero maximo de caracteres da string?
     
  12. Cesaria

    Cesaria Power Member

    A diferença entre os dois é que o scanf lê do stdin, já o fgets é mais usado para ler de ficheiros, mas tb poderás usar-lo para ler do stdin.. Deixo-te aqui esta pagina no qual poderás ter mais info:
    http://www.cplusplus.com/reference/clibrary/cstdio/fgets.html

    Ps:Esqueci-me de referir que o fgets lê sempre para uma string..
     
    Última edição: 1 de Maio de 2007
  13. TNTiago

    TNTiago Power Member

    ok obrigado hoje já é tarde amanã vou ver se dou mais uma olhadela nisto, tou a tentar entender estes conceitos pois tenho de fazer um trabalho e ainda não estou muito á vontade com a linguagem.
     
  14. TNTiago

    TNTiago Power Member

    o progrma funciona bem , mas ao escrever nomes com espaços acontecem malgumas modificaçoes no seguimento do prog, alguem me poderia dar uma ajuda.
     
  15. Warrior

    Warrior Power Member

    Isso é porque o scanf lê uma string até encontrar um \n, \t ou ' '.
     
  16. raVemjr

    raVemjr I'm cool cuz I Fold

    Correcto...nesse caso o melhor seria usar um for com getchar() la dentro, e fazer uma verificação ciclo a ciclo para ver se meteste um \n (ou paragrafo)

    Algo deste género:

    int i,j=1;
    char c, string[20];
    getchar(c);
    if(c|='\n')
    string[0]=c;

    for(i=0;c!='\n';j++,i++)
    {
    getchar(c);
    string[j]=c;
    }
     
    Última edição: 6 de Maio de 2007
  17. Zukunft

    Zukunft Power Member

    hey,

    a ver se desta consigo obter uma rps.. tenho aqui num código a imprimir com o formato %g.. este formato é para quê?
     
  18. Zukunft

    Zukunft Power Member

    não fiquei esclarecido.. podias explicar sff..
     
    Última edição: 27 de Junho de 2007
  19. raVemjr

    raVemjr I'm cool cuz I Fold

    %c refere-se a um caracter certo? %d refere-se a um int certo? %g refere-se a um número de vírgula flutuante, ou seja, o float. Estar %g %G ou %f ia dar ao mesmo...
     

Partilhar esta Página