Jump to content

Ler espaços com o sscanf


Guest id194

Recommended Posts

Tenho este simples código num programa:

if(sscanf(args, "%d,%d,%[^\n]", &x, &y, aux) == 3) {
//
}

O problema é que se eu escrever algo como "5,4,aaa bbb", o x vai tomar o valor de 5 ou y o valor de 4 e o aux o valor de "aaa" e eu queria que tomasse o valor de "aaa bbb" e neste caso o sscanf retorna 2 e não 3, logo não vai entrar no if...

já tentei procurar bues sobre o sscanf mas não encontrei solução para apanhar os espaços... se alguem puder ajudar...

Link to comment
Share on other sites

http://www.cplusplus.com/ref/cstdio/sscanf.html

http://msdn2.microsoft.com/en-us/library/kwwtf9ch.aspx

Com sscanf's não vais lá. O sscanf pára SEMPRE quando encontra um espaço, tab ou newline, como está a dizer no 1º link:

s String of characters. This will read subsequent characters until a whitespace is found (whitespace characters are blank, newline and tab).

e também no 2º link:

An input field is defined as all characters up to the first white-space character (space, tab, or newline)

Desaparecido.

Link to comment
Share on other sites

mas deve haver alguma forma de lhe dar a volta...

num forum disseram-me k se escrevesse tipo: sscanf(args, "%d,%d,%99[^\n]", &x, &y, aux) ou outro numero tipo a dimensão do args, que funcionava, mas agora não posso exprimentar. de qualquer forma, o gajo que me disse isto, disse que como está, também funciona e apanha os espaços, no meu sistema isso não está a acontecer...

Link to comment
Share on other sites

@Knitter

se reparares bem o sscanf faz isso... "%d,%d,%[^\n]"

apanha um inteiro, uma virgula, um inteiro, uma virgula e depois uma string até encontrar um \n, é isto que faz aquele código... mas deixem lá que já resolvi. este código funciona, não ha nada de mal com ele. O sscanf não irá parar nos espaços (como disseram por ai) se tiverem algo deste genero. O meu problema estava antes desta função, a variavel "args" ja chegava a este ponto sem o resto do texto...

Link to comment
Share on other sites

Dsc insistir mas eu já utilizei esse tipo de leitura muitas vezes e tenho a funcionar, mas não era bem isso que eu queria acrescentar 😛 , Normalmente uso

%[^\n]\n nesta solução o que é lido é: tudo até ao '\n' incluindo o '\n', desta forma se aparecerem espaços pelo meio eles tb são comidos.

Se continuares com problemas experimenta ir à minha página http://www.student.estg.ipleiria.pt/~ei10635, na secção de downloads estão lá trabalhos em C, escolhe o primeiro da disciplina de Sistemas Distribuidos e Paralelos, tem código para ler ficheiros e faz exactamente o que queres.

Espero no entanto que já tenhas o teu prob resolvido, fica bem.

Bem para a próxima tenho de ler melhor o teu post 😉, percebi que ainda não tinhas o teu código a funcionar, dsc.

Peace.

Link to comment
Share on other sites

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.