YsoSirius Posted April 26, 2015 at 07:42 PM Report Share #581883 Posted April 26, 2015 at 07:42 PM Boa noite. Eu tenho um problema no meu código que é o seguinte: tenho uma string que vai guardar, por exemplo, o nome de uma pessoa para um ficheiro de texto, mas acontece que no scanf caso o nome contenha um espaço (ex. Rui Josefino) quando listo o conteudo do ficheiro conta Rui como uma string e Josefino como outra... Ha alguma maneira de o scanf ler um nome com espaços e atribuir tudo á mesma string? Link to comment Share on other sites More sharing options...
apocsantos Posted April 26, 2015 at 08:00 PM Report Share #581885 Posted April 26, 2015 at 08:00 PM Boa noite, scanf ("%[^\n]%*c", nome); //lê até que o valor entrado seja "new-line" Cordiais cumprimentos, Apocsantos "A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito" Link to comment Share on other sites More sharing options...
YsoSirius Posted April 26, 2015 at 08:34 PM Author Report Share #581888 Posted April 26, 2015 at 08:34 PM (edited) Quando utilizo essa opção acaba por me dar uns bugs int escrever() { estrutura ex; FILE *fp; fp = fopen("nomes.dat","ab"); if( fp == NULL ) { printf("Ficheiro nao existe.\n"); return 0; } printf("Nome:\n"); scanf("%[^\n]%*c", ex.nome); printf("Idade:\n"); scanf("%d", &ex.idade); fwrite(&ex, sizeof(estrutura),1, fp); printf("YES!!\n"); fclose(fp); } O nome sai desconfigurado quando vou listar e está a passar afrente a parte de pedir a idade Edited April 26, 2015 at 09:11 PM by apocsantos geshi Link to comment Share on other sites More sharing options...
YsoSirius Posted April 26, 2015 at 08:44 PM Author Report Share #581890 Posted April 26, 2015 at 08:44 PM (edited) Caso seja preciso: #include <stdio.h> #include <stdlib.h> #define TAM 200 typedef struct MinhaEstrutura { char nome[TAM]; int idade; } estrutura; int listar() { FILE *fp; estrutura x; fp = fopen("nomes.dat","rb"); // read mode if( fp == NULL ) { printf("Ficheiro nao existe\n"); } printf("\n"); printf("Conteudo:\n"); while(fread(&x, sizeof(struct MinhaEstrutura), 1, fp)==1) { printf("%s %d\n",x.nome, x.idade); } fclose(fp); printf("\n"); } Edited April 26, 2015 at 09:12 PM by apocsantos geshi Link to comment Share on other sites More sharing options...
apocsantos Posted April 26, 2015 at 09:17 PM Report Share #581893 Posted April 26, 2015 at 09:17 PM (edited) Boa noite, int escrever() { estrutura ex; FILE *fp; fp = fopen("nomes.dat","ab"); if( fp == NULL ) { printf("Ficheiro nao existe.\n"); return 0; } printf("Nome:\n"); scanf("%[^\n]%*c", &ex.nome); //some black magic AKA Attention! printf("Idade:\n"); scanf("%d", &ex.idade); fwrite(&ex, sizeof(estrutura),1, fp); printf("YES!!\n"); fclose(fp); } Cordiais cumprimentos, Apocsantos Edited April 26, 2015 at 09:17 PM by apocsantos geshi "A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito" Link to comment Share on other sites More sharing options...
lulamen Posted May 6, 2015 at 09:12 PM Report Share #582634 Posted May 6, 2015 at 09:12 PM (edited) Basta fazeres: scanf(" %[^\n]s",ex.nome); Edited May 7, 2015 at 07:58 AM by apocsantos Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted May 7, 2015 at 10:06 AM Report Share #582664 Posted May 7, 2015 at 10:06 AM Basta fazeres: scanf(" %[^\n]s",ex.nome); isso está errado. a escape sequence é somente: %[^\n] o s no fim indica a suposição de existência desse caracter no buffer de entrada fora da sequência de caracteres a serem guardados é obvio que isso não faz sentido porque a sequência irá terminar quando detectar um '\n', o que diferente de 's'. no final, irá dar um erro de leitura "invisível" porque a string é lida e o 's' final não. no entanto, é bom saber/relembrar que isso está errado ... 1 Report IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
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