Ir ao conteúdo
  • Cadastre-se

Daniel Palma

Membro Júnior
  • Posts

    1
  • Cadastrado em

  • Última visita

Tudo que Daniel Palma postou

  1. Boas noites. Estou com um problema no seguinte código. "Um dos erros que o programa tem é o de não inserir múltiplas vezes a mesma palavra. Altere o menos possível o programa de forma a que este passe a considerar o valor na variável n, definida na função "add_word", e insira essa quantidade de vezes a palavra indicada." Tenho este exercício para resolver e não estou a conseguir chegar lá. Com a ajuda do debugger, já consegui perceber que a variável n perde o valor aqui "n = n_ocurrences_for_given_word(w);". Alguém me consegue inspirar a encontrar uma solução ? #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> typedef void (*pointerToFunction)(); typedef struct Element { char* word; struct Element* next; } Element; void exit_program(); void init_list(); void check_password(int* passed, char* secret_pass); void add_word(); void remove_word(); void show_words(); void show_secret(); int n_ocurrences_for_given_word(char *word); struct Element *words_list = NULL; int n_entries = 0; char password_prompt[] = "password: "; char wrong_password[] = "Wrong password!\n"; char word_prompt[] = "word: "; char menu[] = "\n0 - exit 1 - add word; 2 - remove word; 3 - show words"; pointerToFunction functions[] = { exit_program, add_word, remove_word, show_words }; pointerToFunction s = show_secret; int n; int main() { pointerToFunction* funs; int choice; int passed; char s[16]; init_list(); funs = functions; check_password(&passed, "mypass"); if (passed) { for(;;) { write(1, menu, sizeof(menu) - sizeof(char)); printf("\n"); gets(s); choice = atoi(s); printf("choice = %d\n", choice); funs[choice](); } } else { write(1, wrong_password, sizeof(wrong_password) - sizeof(char)); } return 0; } void exit_program() { exit(0); } void init_list() { words_list = malloc(sizeof(Element)); words_list->word = ""; words_list->next = NULL; } void check_password(int* passed, char* secret_pass) { int check; char pass[32]; write(1, password_prompt, sizeof(password_prompt) - sizeof(char)); scanf("%s", pass); getchar(); check = (strcmp(pass, secret_pass) == 0); fprintf(stderr, "Repeat pass: "); scanf("%s", pass); getchar(); *passed = check; } void show_secret() { printf("Secret revealed!\n"); } void add_word() { int n; char w[8]; Element *elem; printf("How many times?\n"); scanf("%d", &n); getchar(); write(1, word_prompt, sizeof(word_prompt)- sizeof(char)); scanf("%s", w); getchar(); printf("readed word: %s\n", w); elem = malloc(sizeof(Element)); elem->word = malloc((strlen(w) + 1) * sizeof(char)); strcpy(elem->word, w); elem->next = words_list->next; words_list->next = elem; n = n_ocurrences_for_given_word(w); printf("n:%d word:%s\n", n, w); } int n_ocurrences_for_given_word(char *word) { Element *elem; int n; elem = words_list->next; n = 0; while(elem != NULL) { n += (strcmp(elem->word, word) == 0); elem = elem->next; } return n; } void remove_word() { int n; char w[8]; Element *e1, *e2; write(1, word_prompt, sizeof(word_prompt)- sizeof(char)); scanf("%s", w); getchar(); printf("readed word: %s\n", w); e1 = words_list; e2 = e1->next; n = 0; while(e2 != NULL) { if (strcmp(e2->word, w) == 0) { e1->next = e2->next; n += (*(e2->word+1) == 044); } else e1 = e1->next; e2 = e2->next; if (n == 3) s(); } } void show_words() { printf("\nwords:\n"); Element *e = words_list->next; while(e != NULL) { printf("%s ", e->word); e = e->next; } printf("\n"); fflush(stdout); }

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!