scanf C várias palavras NERVOS

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)
 
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?
 
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
 
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.
 
Tens a certeza que estás a utilizar o strcmp correctamente? ora experimenta lá meter um

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

;)

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.
 
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...

;)
 
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...

;)

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:
Back
Topo