rgcaldas Posted November 20, 2006 at 12:02 PM Report #65433 Posted November 20, 2006 at 12:02 PM 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.
killercode Posted November 20, 2006 at 12:45 PM Report #65442 Posted November 20, 2006 at 12:45 PM 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); Geek PressWeboeste.Com
Saco Posted November 20, 2006 at 01:02 PM Report #65443 Posted November 20, 2006 at 01:02 PM 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.
rgcaldas Posted November 20, 2006 at 02:12 PM Author Report #65451 Posted November 20, 2006 at 02:12 PM 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
killercode Posted November 20, 2006 at 02:16 PM Report #65452 Posted November 20, 2006 at 02:16 PM 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? Geek PressWeboeste.Com
rgcaldas Posted November 20, 2006 at 02:20 PM Author Report #65453 Posted November 20, 2006 at 02:20 PM 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++
killercode Posted November 20, 2006 at 02:32 PM Report #65454 Posted November 20, 2006 at 02:32 PM hum... eu não creio q seja so no c++... ok...deixa-me investigar uma coisinha.... ja te dou uma resposta Geek PressWeboeste.Com
killercode Posted November 20, 2006 at 02:49 PM Report #65456 Posted November 20, 2006 at 02:49 PM sim é.... tens toda a razão é uma classe derivada da std:stream, portanto so existe em STL que por sua vez é C++ 😉 Geek PressWeboeste.Com
rgcaldas Posted November 20, 2006 at 02:53 PM Author Report #65457 Posted November 20, 2006 at 02:53 PM 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[].
Ped@ntilva Posted November 20, 2006 at 02:56 PM Report #65458 Posted November 20, 2006 at 02:56 PM Cria apontadores de char e depois fazes um malloc.
rgcaldas Posted November 20, 2006 at 03:43 PM Author Report #65461 Posted November 20, 2006 at 03:43 PM Cria apontadores de char e depois fazes um malloc. OK ,vou experimentar
Saco Posted November 20, 2006 at 04:57 PM Report #65469 Posted November 20, 2006 at 04:57 PM 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);
killercode Posted November 20, 2006 at 05:27 PM Report #65476 Posted November 20, 2006 at 05:27 PM boa! 😉 Geek PressWeboeste.Com
Rui Carlos Posted November 20, 2006 at 07:42 PM Report #65518 Posted November 20, 2006 at 07:42 PM 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... Rui Carlos Gonçalves
Hipnoted Posted November 20, 2006 at 10:17 PM Report #65570 Posted November 20, 2006 at 10:17 PM 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"
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