Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
HIT_Braga

Ajuda com o readline.h

Recommended Posts

HIT_Braga

Boas.

Estou a tentar resolver um problema mas não arranjo maneira de dar a volta a isto.

#include<stdio.h>
#include<stdlib.h>
#include <readline/readline.h>
#include <readline/history.h>
#include <string.h>
int num_args(char *op)
{
int numero=0;
char *temp;
temp=strtok(op," ");
while (temp!=NULL)
{
numero++;
}
return numero;
}

int main ()
{
char *r;
int a;
r=readline("LETRAS: ");
a=num_args(r);
printf("Numero ARGS: %d",a);
}

Quero ler uma linha escrita pelo utilizador, e contar o número de argumentos introduzidos (tipo:" inserir 20 30", daria 3 argumentos , ou apagar 10 daria 2 argumentos, visto que são sempre separados por espaços).

Quero ficar com o número, e o comando que o utilizador escolheu.

Sem mais

HIT


" Elogios não me elevam, ofensas não me rebaixam, sou o que sou e não o que acham! "

Share this post


Link to post
Share on other sites
TheDark

Tens que actualizar a variável temp, percorrendo a lista de tokens. Para isso, voltas a afectar temp com o resultado de strtok dentro do while, com NULL como 1º argumento, e mantendo " " como 2º argumento.


Desaparecido.

Share this post


Link to post
Share on other sites
HIT_Braga

Boas

mudei o código como disseste axo:

#include <readline/history.h>
#include <string.h>
int num_args(char *op)
{
int numero=0;
char *temp;
temp = strtok (op," ");
  while (temp != NULL)
  {
numero++;
/*    printf ("%s\n",pch);*/
    temp = strtok (NULL, " ");
  }
  return numero;
}

int main ()
{
char *r;
int a;
r=readline("LETRAS: ");
a=num_args(r);
printf("Numero ARGS: %d E OPçÃO:%s\n",a,r);
}

Conta direito o numero de "argumento" mas modifica-me a variavel r.

resultado:

vadmin@ubuntu:~/testes$ ./teste

LETRAS: p 1 1

Numero ARGS: 3 E OPçÃO:p


" Elogios não me elevam, ofensas não me rebaixam, sou o que sou e não o que acham! "

Share this post


Link to post
Share on other sites
TheDark

Sim, é um efeito secundário da strtok: substitui os caracteres separadores da string por \0, terminando-a neste caso no 1º espaço. Se queres preservar a string original, tens que copiá-la e passar a cópia à função strtok.


Desaparecido.

Share this post


Link to post
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
Sign in to follow this  

×

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.