Ir para o conteúdo
rgcaldas

[C] Ajuda: Ler uma string com espaços

Mensagens Recomendadas

rgcaldas    0
rgcaldas

Boas

Tenho outro problema que não estou a conseguir resolver.

eu tenho uma string para a qual estou a ler o que o user coloca com um scanf, mas na string só fica o que se escreve até ao primeiro espaço. tipo:

char string[100];
  scanf("%s",string);

Com algo do genro se eu escrever - artigo teste - só la fica artigo.

Peço desculpa se isto for daquelas duvida imbecis, mas tenho andado à procura e não encontro nada.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
killercode    1
killercode

Infelizmente a leitura a partir do teclado utilizando o scanf le somente ate ao primeiro espaço.......

para contornares isso usaa função gets....

gets(texto);

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Saco    0
Saco

Infelizmente a leitura a partir do teclado utilizando o scanf le somente ate ao primeiro espaço.......

Não é bem assim... a função scanf lê a partir do teclado baseando-se na formatação que usares (exactamente a mesma coisa que o printf). Portanto, se quiseres ler espaços tens de usar "%s %s". Ainda assim, tens o problema que é cada palavra do input ficar guardada numa string diferente.

para contornares isso usaa função gets....

gets(texto);

Exacto, embora o uso do gets seja altamente desaconselhado pela maioria dos compiladores (porque pode ser usado maliciosamente), em principio não vais ter problemas desde que os utilizadores do programa não sejam maldosos.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
rgcaldas    0
rgcaldas

para contornares isso usaa função gets....

gets(texto);

Thanks, já funciona

Não é bem assim... a função scanf lê a partir do teclado baseando-se na formatação que usares (exactamente a mesma coisa que o printf). Portanto, se quiseres ler

espaços tens de usar "%s %s". Ainda assim, tens o problema que é cada palavra do input ficar guardada numa string diferente.

Assim é mais critico, por não sei quantos espaços vão aparecer.

Exacto, embora o uso do gets seja altamente desaconselhado pela maioria dos compiladores (porque pode ser usado maliciosamente), em principio não vais ter problemas desde que os utilizadores do programa não sejam maldosos.

Á partida não é problema, isto é um trabalho escolar, por isso fica o gets

Obrigado

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
killercode    1
killercode

epa.... mas se meters scanf(%s %s) tambem é uma treta.... tu não sabes o q é suposto o utilizador escrever ali.... supõe que é para intrudizer o nome completo!?!?!?

não sabes se o utlizador tem 5 nomes ou 3 nomes...

como resolves uma situação dessas?

a unica solução é "meter uma abaixo" e descer um nivel.... cin >> varString1 ;)

o q achas?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
rgcaldas    0
rgcaldas

Não há crise, o gets parece resolver o problema, só fico com um stress que ainda tenho de pesquisar.

Quando o gets tenta guardar mais caracteres do que a string aguenta, a aplicação rebenta, e no linux, o gcc não me deixa definir strings variaveis, tipo char string[].

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Saco    0
Saco

Era precisamente a esse problema do tamanho máximo que eu me referia quando falei em utilizadores mal intencionados. Assim podes (e deves) utilizar a função fgets que é usada para ler a partir de um ficheiro e que permite definir um número máximo de bytes a serem lidos.

Exemplo:

char[50] string;
fgets(string, 50, 0);

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rui Carlos    312
Rui Carlos

Era precisamente a esse problema do tamanho máximo que eu me referia quando falei em utilizadores mal intencionados. Assim podes (e deves) utilizar a função fgets que é usada para ler a partir de um ficheiro e que permite definir um número máximo de bytes a serem lidos.

Exemplo:

char[50] string;
fgets(string, 50, 0);

usar o fgets tem um problema, é que pode deixar caracteres no buffer.

convém verificar o tamanho da string que foi lida e se tiverem sido lidos o número máximo de caracteres convém executar o seguinte código:

while(getchar()!='\n');

que, normalmente, resolve o problema, embora em casos muito particular possa não funcionar bem...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade