oliveira1991 Posted March 4, 2013 at 06:31 PM Report #497880 Posted March 4, 2013 at 06:31 PM (edited) Boa tarde, Estou a fazer uma gestão de biblioteca, tenho um problema, quando estou a dar espaço entre palavras no registo de algum dado, o programa começa a escrever numeros e não faz o que foi solicitado. Podem ajudar pff! Obrigado void registra(char nome[100], int ano, char editora[100] ) { FILE *fd; fd=fopen("BD_livro.txt","a"); /* criar ficheiro*/ fprintf(fd, "%s\n", nome); fprintf(fd, "%d\n", ano); fprintf(fd, "%s\n", editora); printf("\n\tDados registrados!\n"); fclose(fd); getchar(); } Edited March 4, 2013 at 06:32 PM by thoga31 GeSHi Live for ever
HappyHippyHippo Posted March 4, 2013 at 06:39 PM Report #497884 Posted March 4, 2013 at 06:39 PM apresenta o código que tens onde preenches os dados dos arrays/strings que estás a escrever no ficheiro IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
oliveira1991 Posted March 4, 2013 at 06:40 PM Author Report #497886 Posted March 4, 2013 at 06:40 PM (edited) Sorry, coloqueio mal o codigo, segue em baixo o codigo que estou a usar. int main(void) { FILE *fd; int menu,ano; char nome[100]; char editora[100]; while (menu!=0) { limpa(); printf("\n\t Biblioteca\n"); printf("\n\t(1)\tRegistrar Livro."); printf("\n\t(2)\tProcurar Livro."); printf("\n\t(3)\tLista de Livros."); printf("\n\t(4)\tLimpar Livro."); printf("\n\t(5)\tSobre."); printf("\n\n\t(0)\tSair."); printf(" "); scanf("%d",&menu); getchar(); switch (menu) { { case 1: { printf("\n\tEntre com o Nome: "); scanf("%s",&nome); printf("\n\tAno de edicao: "); scanf("%d",&ano); getchar(); printf("\n\tEditora: "); scanf("%s",&editora); getchar(); registra(nome, ano, editora); } } break; Edited March 4, 2013 at 06:48 PM by pmg Falta LP no GeSHi Live for ever
HappyHippyHippo Posted March 4, 2013 at 09:00 PM Report #497901 Posted March 4, 2013 at 09:00 PM scanf não lê espaços entre palavras, para isso usa a função fgets char nome[100]; if (!fgets(nome, 100, stdin)) { // erro de leitura } IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
oliveira1991 Posted March 6, 2013 at 05:45 PM Author Report #498163 Posted March 6, 2013 at 05:45 PM Boas, tentei o que me indicaram, em baixo o que eu fiz, mas continua na mesma, e agora ele quando dou o espaço e escreve a primeira string e depois dá um numero qualquer no ano de edição e a segunda string na editora! case 1: { printf("\n\tQual o Nome: "); // scanf("%s",&nome); if (!fgets(nome,100,stdin)) { printf("Erro tente novamente"); } Live for ever
HappyHippyHippo Posted March 6, 2013 at 05:53 PM Report #498165 Posted March 6, 2013 at 05:53 PM explica exactamente o que acontece (e não comas palavras) de preferência, apresenta o output que é apresentado e o que era esperado apresentar, assim como o código actual IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
oliveira1991 Posted March 6, 2013 at 05:58 PM Author Report #498166 Posted March 6, 2013 at 05:58 PM Exemplo se digitar, lisboa nova eis o output: lisboa 2686828 ova e apos dar enter ele não deixa colocar mais nada, apenas o nome do livro, e como se pode deparar, ele remove a primeira letra da segunda String int main(void) { FILE *fd; int menu,ano; char nome[100]; char editora[100]; while (menu!=0) { limpa(); printf("\n\t Biblioteca\n"); printf("\n\t(1)\tRegistrar Livro."); printf("\n\t(2)\tProcurar Livro."); printf("\n\t(3)\tLista de Livros."); printf("\n\t(4)\tLimpar Livro."); printf("\n\t(5)\tSobre."); printf("\n\n\t(0)\tSair."); printf(" "); scanf("%d",&menu); getchar(); switch (menu) { { case 1: { printf("\n\tQual o Nome: "); if (!fgets(nome,100,stdin)) { printf("Erro tente novamente"); } // scanf("%s",&nome); printf("\n\tAno de edicao: "); scanf("%d",&ano); getchar(); printf("\n\tEditora: "); scanf("%s",&editora); getchar(); registra(nome, ano, editora); } } break; Live for ever
HappyHippyHippo Posted March 6, 2013 at 06:04 PM Report #498167 Posted March 6, 2013 at 06:04 PM (edited) eu quando pedi o output pedi tudo que é apresentado na consola (seja tu, o programa ou o sistema operativo a escrever) ps : por outras palavras : faz copy paste da consola ... Edited March 6, 2013 at 06:05 PM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
oliveira1991 Posted March 6, 2013 at 06:15 PM Author Report #498168 Posted March 6, 2013 at 06:15 PM ou seja uma imagem da linha de comandos certo? Live for ever
oliveira1991 Posted March 6, 2013 at 06:29 PM Author Report #498169 Posted March 6, 2013 at 06:29 PM (edited) http://www.flickr.com/photos/93620520@N04/8534929998/in/photostream Edited March 6, 2013 at 07:14 PM by thoga31 Preview da imagem adicionado Live for ever
HappyHippyHippo Posted March 6, 2013 at 08:32 PM Report #498185 Posted March 6, 2013 at 08:32 PM (edited) se o teu código é o que apresentaste, indenta o código correctamente e diz se não verificas nenhum problema ps : olha bem para o scanf da editora ... Edited March 6, 2013 at 08:34 PM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
oliveira1991 Posted March 17, 2013 at 12:27 PM Author Report #499472 Posted March 17, 2013 at 12:27 PM Boas tardes, Tenho estado a tentar fazer de tudo para a resolução deste programa mas até agora ainda não consegui descobrir o erro, peço que me dêem uma luz!! Live for ever
pmg Posted March 17, 2013 at 12:31 PM Report #499475 Posted March 17, 2013 at 12:31 PM Quando usas "%s" no scanf, esse "%s" nao 'apanha' espacos. Se o nome da editora for "Editora Nova" o scanf para no espaco (que e apanhado com o getchar()) ficando "Nova" no input para o ano de edicao! Sugestao: nao uses scanf() para input do utilizador. Prefere fgets() e tratamento posterior da string. What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
oliveira1991 Posted March 18, 2013 at 04:33 PM Author Report #499561 Posted March 18, 2013 at 04:33 PM Boas, Já tentei o seguinte código apos o printf, mas não esta a resultar fgets(nome, 100, stdin); Live for ever
HappyHippyHippo Posted March 18, 2013 at 04:35 PM Report #499562 Posted March 18, 2013 at 04:35 PM apresenta o código que tens agora IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
oliveira1991 Posted March 18, 2013 at 04:42 PM Author Report #499563 Posted March 18, 2013 at 04:42 PM printf("\n\tQual o nome do Livro: "); fgets(nome, 100, stdin); apenas estou com este código para registar o nome do livro. Live for ever
HappyHippyHippo Posted March 18, 2013 at 04:43 PM Report #499566 Posted March 18, 2013 at 04:43 PM printf("\n\tQual o nome do Livro: "); fgets(nome, 100, stdin); apenas estou com este código para registar o nome do livro. isso já tinhas dito, eu disso para apresentares "o código" já que estás renitente em apresentar, ao menos indica o que queres dizer com : mas não esta a resultar IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
oliveira1991 Posted March 18, 2013 at 04:47 PM Author Report #499567 Posted March 18, 2013 at 04:47 PM mas o código eu já o apresentei completo em cima, apenas coloquei fgets(nome, 100, stdin); , não esta a resultar porque não esta a ler a string completa! Live for ever
HappyHippyHippo Posted March 18, 2013 at 04:56 PM Report #499569 Posted March 18, 2013 at 04:56 PM se continuas com o código acima, então : se o teu código é o que apresentaste, indenta o código correctamente e diz se não verificas nenhum problema IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
oliveira1991 Posted March 18, 2013 at 04:59 PM Author Report #499571 Posted March 18, 2013 at 04:59 PM Lá esta, eu ainda ando ando a tentar perceber disto, dai não perceber aonde esta o erro! Live for ever
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now