Jump to content
guilhoto

tarefas e prioridades

Recommended Posts

guilhoto

boa tarde,

queria fazer um programa que recebesse uma tarefa e uma prioridade(de 0 a 5) e que as guardasse tudo em listas

o programa não responde depois do scanf por isso calculo que o problema esteja na função NEW, alguém me poderia ajudar?

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


typedef struct tarefa{
    char *text;
    struct tarefa *next;
}*tarefas;


typedef struct prioridade{
    struct prioridade *next;
    tarefas tarefa;
}prioridades[6];

tarefas NEW(char* text,int prioridade){
    prioridades y;
    tarefas x = (tarefas) malloc(sizeof(struct tarefa));
    x->text =(char*) malloc(sizeof(char)*(strlen(text)+1));
    strcpy(y[prioridade].tarefa->text, text);
    x->next = NULL;
    return x;
}
main(){
    char* s;
    int d;
    scanf("%s %d", s, &d );
    NEW(s,d);
}

Edited by thoga31
GeSHi

Share this post


Link to post
Share on other sites
HappyHippyHippo

sabendo que necessitas de 4 bytes para guardar um int e n bytes para guardar uma string com n-1 caracteres, consegues responder a esta questão :

em que posições de memória estás a gravar a string que estás a ler do teclado ?


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
guilhoto

supostamente no s...mas se meter char s[500] para um limite de 499 palavras da tarefa não resolvera o problema certo?

Share this post


Link to post
Share on other sites
HappyHippyHippo

o que é o "s" em "char * s" ?

e

char s[500]

não guarda 499 palavras, mas sim 500 bytes que serão considerados como caracteres pelo compilador (sim, o terminador da string é um caracter especial)


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
guilhoto

eu gostaria que fosse onde guardava a string, mas pela tua resposta percebi que o s não e nada do que eu quero...

Share this post


Link to post
Share on other sites
HappyHippyHippo

pelo exercício que estas a fazer além das respostas dadas, parece que ainda não "entraste na porta" dos ponteiros, porque depois disso, o teu mundo da programação vai se tornar "mais colorido".

por isso, basta saberes que o que pretendes é na realidade, o "char s[500]".

  • Vote 1

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
thoga31

Suponho que seja porque o scanf está à espera de uma string com 500 caracteres seguido de espaço e seguido de um número inteiro. E tu não lhe estás a dar os 500 caracteres.

Além disso, declara o main como deve ser:

int main(void) {
  /* código */
  return 0;
}

// forma completa, mas que agora não precisas:
int main(int argc, char *argv[]) { }

Edited by thoga31

Knowledge is free!

Share this post


Link to post
Share on other sites
HappyHippyHippo

eu, sinceramente, não faço ideia do que andas a fazer na função NEW ... isso está uma salgalhada pegada.

o teu problema poderá estar em dois locais:

- falta de validação dos dados de entrada

- ignirar as mensagens de warning que o compilador emite quando é usado o parâmetros -Wall

(na realidade eu acho é que andas a dar nomes às tarefas com mais do que uma palavra)


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.