Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <conio.h> //getch
- #include <locale.h> //acentuação
- /** ATENÇÃO
- * 1.O arquivo ja deve existir com pelo menos um registro formatado!
- **/
- char seleciona_menu()
- {
- char op;
- printf("selecione uma das opções\n"
- "0.Sair\n"
- "1.Jogar\n"
- "2.Ranking\n"
- "R.");
- scanf ("%s",&op);
- system ("cls");
- return op;
- }
- struct registro
- {
- char nome[50];
- int pontuacao;
- struct registro *esq, *dir;
- };
- typedef struct registro* registroptr;
- // Funcao para criar o primeiro no de uma lista circular duplamente ligada
- void criad(registroptr *lista,char x[], int pont)
- {
- registroptr p;
- p = (registroptr)malloc(sizeof(struct registro));
- strcpy(p->nome,x);
- p->pontuacao=pont;
- p->esq = p;
- p->dir = p;
- *lista = p;
- }
- // Funcao para inserir um no a direita do no apontado por p em uma lista circular duplamente ligada
- void inseredir(registroptr *p,char x[], int pont)
- {
- registroptr q;
- registroptr d; // ponteiro para o no a direita de p
- q = (registroptr)malloc(sizeof(struct registro));
- strcpy(q->nome,x);
- q->pontuacao=pont;
- d = (*p)->dir;
- d->esq = q;
- q->dir = d;
- q->esq = *p;
- (*p)->dir = q;
- }
- // Funcao para inserir um no a esquerda do no apontado por p em uma lista circular
- //duplamente ligada
- void insereesq(registroptr *p, char x[] ,int pont)
- {
- registroptr q;
- registroptr e; // ponteiro para o no a direita de p
- q = (registroptr)malloc(sizeof(struct registro));
- q->pontuacao=pont;
- strcpy(q->nome,x);
- e = (*p)->esq;
- e->dir = q;
- q->esq = e;
- q->dir = *p;
- (*p)->esq = q;
- }
- void insere_auto (registroptr *p, char nome[], int pont)
- {
- registroptr q;
- q=*p;
- int cont=0;
- int c=0;
- do
- {
- cont ++;
- if(q->pontuacao <= pont)
- {
- insereesq(&q, nome, pont);
- printf ("inserido1!\n");
- for (c;c<cont;c++)
- q=q->esq;
- *p=q;
- return;
- }
- else if (q->pontuacao > q->esq->pontuacao && pont <= q->esq->pontuacao)
- {
- printf ("inserido2!\n");
- insereesq(&q, nome, pont);
- *p=q;
- return;
- }
- q=q->dir;
- }while(q!=*p);
- }
- void mostrar_lista (registroptr p)
- {
- registroptr q;
- system ("cls");
- printf ("Pontuação || Nome\n");
- q=p;
- do
- {
- printf ("%d || %s\n", q->pontuacao,q->nome);
- q=q->dir;
- }while(p!=q);
- getch();
- system ("cls");
- }
- int main()
- {
- setlocale(LC_ALL, "Portuguese"); //habilitando acentos
- char op;
- FILE *arquivo;
- system ("color f");
- printf("Bem vindo ao Joguinho\n");
- op = seleciona_menu();
- while (op!='0')
- {
- switch(op)
- {
- case '1':
- system ("cls");
- char nome[50];
- printf ("Digite seu primeiro nome: ");
- fflush(stdin);
- gets(nome);
- system ("cls");
- printf ("escolha a dificuldade\n"
- "1.Funções de primeiro grau\n"
- "2.Funções de segundo grau\n"
- "3.Funções de terceiro grau\n"
- "R.");
- int pontuacao;
- scanf ("%d",&pontuacao);
- //funcao_rafael(op);
- //op nesse caso é a dificuldade
- registroptr lista = NULL;
- char rnome[50];
- int rpontuacao;
- arquivo = fopen("arquivo.txt", "r");
- if (arquivo==NULL)
- printf ("erro ao abrir o arquivo\n");
- else
- {
- while((fscanf(arquivo,"%s %d\n",rnome, &rpontuacao))!=EOF)
- if(lista==NULL)
- criad(&lista,rnome,rpontuacao);
- else
- {
- inseredir(&lista,rnome,rpontuacao);
- lista=lista->dir;
- }
- fclose(arquivo);
- }
- lista=lista->dir;
- mostrar_lista(lista);
- insere_auto(&lista, nome, pontuacao);
- getch();
- //inserindo os dados no arquivo
- arquivo = fopen("arquivo.txt", "w+");
- if(arquivo==NULL)
- printf ("erro ao abrir o arquivo\n");
- else
- {
- registroptr p;
- p=lista;
- do
- {
- fprintf (arquivo, "%s %d\n", p->nome,p->pontuacao);
- p=p->dir;
- }while(p!=lista);
- fclose(arquivo);
- }
- break;
- case '2':
- system ("color a");
- arquivo = fopen("arquivo.txt","r");
- if(arquivo==NULL)
- printf ("\nerro ao abrir arquivo..\n");
- else
- {
- printf ("Pontos || Nome\n");
- while((fscanf(arquivo,"%s %d\n",nome, &pontuacao))!=EOF)
- printf ("%d || %s\n", pontuacao,nome);
- fclose(arquivo);
- }
- printf ("pressione alguma tecla pra continuar...");
- getch();
- system ("color f");
- system ("cls");
- break;
- default:
- printf ("opção inválida! Pressione qualquer tecla\n");
- getch();
- system ("cls");
- break;
- }
- op = seleciona_menu();
- }
- system ("color d");
- printf ("obrigado por jogar :)");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement