1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

scanf C várias palavras NERVOS

Discussão em 'Programação' iniciada por zebaril, 24 de Outubro de 2008. (Respostas: 7; Visualizações: 1794)

  1. zebaril

    zebaril Power Member

    Já estou a bastante tempo a procura...e nada...

    Código:
    int COMMAND_SIZE = 100;
    char comando[COMMAND_SIZE];
    
            while (strcmp(comando, "quit")) {       
            scanf("%s", &comando);
            printf("Comando: %s\n",comando);
         }

    Suportamento isto fica a ler do teclado até carregar no quit.

    Agora vem o meu grande problema..tenho vários formatos e preciso de separar isso para outras funções..

    Ou seja preciso de contar os espaços ou arranjar algum padrão para ele separar as coisas...

    Aqui vão as sintaxes usadas..

    palavra1 palavra2 palavra3 palavra4
    ou
    palavra1 palavra2
    ou
    palavra1
    ou
    quit
    (para sair)
     
  2. Mach4_PT

    Mach4_PT Power Member

    Código:
    char linha[100], palavra1[100],palavra2[100],palavra3[100];
    
    fgets(linha,100,stdin);
    sscanf(linha,"%s %s %s %s", palavra1, palavra2, palavra3);
    if (strcmp(palavra1,"quit") == 0 || strcmp(palavra2,"quit") == 0 || strcmp(palavra3,"quit") == 0)
    {codigo}
    else
    {codigo}
    
    
    isso nao funcionaria?
     
  3. blueomega

    blueomega Power Member

    não percebi exactamente a sintaxe, o quit vem sozinho, vem sempre no fim ou pode vir a meio da string?

    ja agora tenta manipular com o strtok
     
  4. Aparicio

    Aparicio /dev/mod
    Staff Member

    Quando preciso de separar uma string utilizo esta função:

    Código:
    #include <string.h>
    
    char **separar( char *str, char *s )
        {
        char **sep = malloc(1);
        int i = 0;
        do
            {
            sep = (char**)realloc( sep, sizeof(int) * ( i + 1 ) );       
            sep[i] = strtok( i == 0 ? str : NULL, s );
            i++;
            }
        while( sep[i-1] != NULL );
           
        return sep;
        }
    
    int main ()
        {
        char string[] ="1 22 333 4444 55555 666666\0";
        printf("%s\n\n", string);
        
        char **msg = separar( string, " " );
        
        while( *msg != NULL )
            printf("%s\n", *(msg++) ); 
            
        printf("Sair...");
        getchar();
        return 0;
        }
    
    Separa a string de acordo com os caracteres dados no 2º argumento e retorna um array com as palavras.
     
  5. HiGhVoIcE

    HiGhVoIcE Power Member

    Tens a certeza que estás a utilizar o strcmp correctamente? ora experimenta lá meter um

    if (!strcmp(BUFFER, "texto")) { }

    ;)
     
  6. Baderous

    Baderous Banido

    O strcmp está bem colocado. Esta função devolve 0 apenas quando as 2 strings são iguais, logo, enquanto forem diferentes, devolve um valor diferente de zero, logo a condição do ciclo é verdadeira, sendo este executado. Quando forem iguais, strcmp devolve 0, logo a condição é falsa e o ciclo não executa.
     
  7. HiGhVoIcE

    HiGhVoIcE Power Member

    Mas eu não meti nenhum ciclo, meti o strcmp dentro de um if que só é executado quando as duas variaveis em comparação forem iguais. Se ele está a aprender acho que é mais didático meter as coisas o mais simples possível, ou seja, evitando o strcmp como condição de ciclo...

    ;)
     
  8. zebaril

    zebaril Power Member

    Não é a maneira mais bonita mas lá acabei por conseguir fazer...

    Código:
    while (strcmp(palavra1,"quit")) {
    fgets(linha,100,stdin);
    sscanf(linha,"%s %s %s %s %s\n", palavra1, palavra2, palavra3, palavra4);
    
    if (!strcmp(palavra1,"put"))
    printf("Comando: %s %s %s %s\n",palavra1,palavra2,palavra3,palavra4);
    
    .
    ..
    ...
    (depois faço as outras condições
    
    
    agora estou com um problema na separação de um ip seu porto por exemplo

    char server[30] = 192.168.1.1:8080
    em ip = 192.168.1.1
    porto = 8080

    vou expemententar usar a função separar :D

    aceito dicas...e obrigado por toda a disponibilidade

    mas acho a função separar com muito C para a minha cabeça..

    tava a tentar algo do género..mas nao me funciona..

    Código:
    char servers[80] = "192.168.1.100:9817";
    char ip[20];
    char porto[20]; 
    
    
    sscanf(servers,"%s:%s", ip, porto);
    
    printf("%s | %s",ip,porto);
    
     
    Última edição: 24 de Outubro de 2008

Partilhar esta Página