Jump to content

Ler uma string com espaços


Recommended Posts

Posted

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.

Posted

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.

Posted

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

Posted

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?

Posted

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

o q achas?

Pensei que o cin e o cout só no c++

Posted

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[].

Posted

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);
Posted

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...

Posted

Para não te dar o WARNING pelo gets podes usar o seguinte:

fgets(buffer,100,stdin);

"Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.