pereira010 0 Denunciar mensagem Publicado 26 de Fevereiro de 2010 Boas, Antes de mais não sabia ao certo o que por como assunto.. por isso ficou assim Tenho que fazer um programa tipo twitter, mas assim uma coisa muito simples... Por exemplo quando o utilizador cria uma nova conta, não poderá criá-la com um username já existente. Então como posso comparar o username que este quer utilizar com os já criados e que estão guardados num ficheiro? no ficheiro os dados são assim guardados um por linha: "username:password" a ideia era percorrer todas as linhas do ficheiro certo? como posso fazer isso? aqui está o código: #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <string.h> void inicio(); int com_registo(); char username2[25]; char password2[10]; char user_pass2[35]; int sem_registo(); void intro_user_pass(); char username1[25]; char password1[10]; char user_pass1[35]; int sem_registo() { intro_user_pass(); com_registo(); } void intro_user_pass() { system("cls"); FILE *fp1; fp1 = fopen("utilizadores.txt","a+"); printf("\n\n"); printf("\t\t ** Twitter**"); printf("\n\n\n\n"); printf(" -- Faca o registo -- "); printf("\n\n"); printf(" ** username: "); gets(username1); printf(" ** password: "); gets(password1); strcat(user_pass1, username1); strcat(user_pass1, ":"); strcat(user_pass1, password1); strcat(user_pass1, "\n"); printf(" user_pass: %s", user_pass1); int cmp; //comparaçao cmp = strcmp(user_pass1, user_pass2); if( cmp == 0) { printf("\n\n *** Esses dados ja existem! ***"); printf("\n *** Faca um novo registo ***"); printf("\n\n\n\n\n 'Enter' para continuar"); getchar(); intro_user_pass(); } fprintf(fp1, "%s", user_pass1); getchar(); fclose(fp1); } int com_registo() { system("cls"); FILE *fp1; fp1 = fopen("utilizadores.txt","a+"); rewind(fp1); printf("\n\n"); printf("\t\t ** Twitter**"); printf("\n\n\n\n"); printf(" -- Faca o login -- "); printf("\n\n"); printf(" ** username: "); gets(username2); printf(" ** password: "); gets(password2); strcat(user_pass2, username2); strcat(user_pass2, ":"); strcat(user_pass2, password2); strcat(user_pass2, "\n"); int cmp2; //comparaçao cmp2 = strcmp(user_pass1, user_pass2); if( cmp2 != 0) { printf("\n\n *** Esses dados nao existem! ***"); printf("\n *** Faca primeiro o registo ***"); printf("\n\n\n\n\n 'Enter' para continuar"); getchar(); sem_registo(); } getchar(); fclose(fp1); } void inicio() { int escolha1; twitter: printf("\n\n"); printf("\t\t ** Twitter**"); printf("\n\n\n\n"); printf("\t Ja se encontra registado? \n"); printf("\t 1 - Sim\n\t 2 - Nao\n\n\t 0 - Sair"); escolha1 = getch(); switch(escolha1){ case '1': com_registo(); case '2': sem_registo(); case '0': exit(1); default: system("cls"); goto twitter; } } main () { /* //declaraçao e abertura dos ficheiros FILE *fp1,*fp2, *fp3; fp1 = fopen("utilizadores.txt","a+"); fp2 = fopen("mensagem.txt","a+"); fp3 = fopen("seguidores.txt","a+"); */ inicio(); } cumprimentos, pereira010 Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
KiNgPiTo 6 Denunciar mensagem Publicado 26 de Fevereiro de 2010 Algo básico seria: FILE *fp; char linha[200]; fp = fopen("ficheiro.txt","r"); while(fgets(linha,200,fp)) { // Aqui lês a linha... Usa o strtok para separar pelo ":" e compara com o utilizador e com a password inseridas... } fclose(fp); Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
Baderous 33 Denunciar mensagem Publicado 26 de Fevereiro de 2010 Também podes usar a função sscanf com uma expressão regular simples para extrair os valores da string lida através do fgets: #include <stdio.h> int main(void) { char str[1024], username[20], password[20]; FILE *fp = fopen("twitter.txt","r"); while (fgets(str,sizeof(str),fp)) { sscanf(str,"%[^:]:%s",username,password); printf("%s\t%s\n",username,password); } fclose(fp); return 0; } Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
pereira010 0 Denunciar mensagem Publicado 1 de Março de 2010 muito obrigado pessoal! só mais uma coisa... aqui no meu código, quando faço o programa correr como um ciclo, ou seja, que só fecha se o utilizador quiser a minha variavel user_pass1 quando eu introduza um user que nao existe e a comparação feita dá != 0 (strcmp != 0) assim que o programa volta ao inicio para pedir novamente o login ao introduzir novos valores à variavel user_pass1 aparecem sempre uns simbolos antes e assim a comparação não é feita devidamente... fica do género.. 'ý²'user_pass1 como posso evitar isso? #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <string.h> void login(); void menu(); void mostrar_util(); void acrescentar_rel(); void retirar_rel(); void escre_mensagem(); void ler_mensagem(); void login() { system("cls"); FILE *fp1; fp1 = fopen("utilizadores.txt","r"); char username1[25]; char password1[10]; char user_pass1[35]; char user_pass2[35]; int cmp; int y; printf("\n\n"); printf("\t\t ** Twitter**"); printf("\n\n\n\n"); printf(" -- Faca o login -- "); printf("\n\n"); printf(" ** username: "); gets(username1); printf(" ** password: "); gets(password1); strcat(user_pass1, username1); strcat(user_pass1, ":"); strcat(user_pass1, password1); strcat(user_pass1, "\n"); user_pass1 [ strlen(user_pass1) -1] = 0; printf("\nfgets user1 **%s**\n", user_pass1); for(int y=0;fgets(user_pass2,35,fp1)!= NULL; y++) { user_pass2 [ strlen(user_pass2) -1] = 0; cmp = strcmp(user_pass1, user_pass2); if(cmp==0) { printf("\n\nLogin verificado"); getchar(); menu(); } } printf("\n\n\tEsses dados nao existem\n\t'Enter' para continuar"); getchar(); login(); // claro que posso tirar isto.. mas como posso resolver este meu problema ?? } void menu() { int escolha2; menu: printf("\n\n"); printf("\t\t ** Twitter**"); printf("\n\n\n\n"); printf("\t Menu \n"); printf("\t 1 - Mostar utilizadores seguidos\n\t 2 - Acrescentar relacoes\n\t 3 - Retirar relacoes\t 4 - Escrever Mensagem\n\t 5 - Ler mensagem\n\n\t 0 - Sair"); escolha2 = getch(); switch(escolha2){ case '1' : mostrar_util(); case '2' : acrescentar_rel(); case '3' : retirar_rel(); case '4' : escre_mensagem(); case '5' : ler_mensagem(); case '0' : exit(1); default: system("cls"); goto menu; } } void mostrar_util() { printf("\t Mostrar utilizadores seguidos \n"); getchar(); menu(); } void acrescentar_rel() { printf("\t Acrescentar relacoes \n"); getchar(); menu(); } void retirar_rel() { printf("\t Retirar relacoes \n"); getchar(); menu(); } void escre_mensagem() { printf("\t Escrever Mensagem \n"); getchar(); menu(); } void ler_mensagem() { printf("\t Ler Mensagem \n"); getchar(); menu(); } main() { login(); printf("main"); getchar(); } cumprimentos Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
pereira010 0 Denunciar mensagem Publicado 2 de Março de 2010 como uso isto: sscanf(str,"%[^:]:%s",username,password); mas agora em vez dos : com o \n? num ficheiro tenho assim: user mensagem e queria separa-los para poder usar o 'user' ps: como faço para por a cena do código em C, só sei por isto (code)(/code).. com parêntesis rectos.. eu sei.. Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
Baderous 33 Denunciar mensagem Publicado 2 de Março de 2010 como uso isto: sscanf(str,"%[^:]:%s",username,password); mas agora em vez dos : com o \n? num ficheiro tenho assim: user mensagem e queria separa-los para poder usar o 'user' Não podes porque o fgets pára de ler a string quando encontra o '\n'. Para isso fazes 2 fgets, no 1º lês o user e no 2º a mensagem. ps: como faço para por a cena do código em C, só sei por isto (code)(/code).. com parêntesis rectos.. eu sei.. [ code=c ][ /code ] (sem os espaços) Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites