Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

HIT_Braga

Ajuda com o readline.h

Mensagens Recomendadas

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! "

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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! "

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação 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. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.