Programação Progressiva

Fórum para dúvidas dos sites: Programação Progressiva, Java Progressivo, C Progressivo


Você não está conectado. Conecte-se ou registre-se

operação com ponteiro

Ver o tópico anterior Ver o tópico seguinte Ir em baixo  Mensagem [Página 1 de 1]

1 operação com ponteiro em Seg Fev 08, 2016 4:56 pm

Olá,

Veja o primeiro exercício (funciona):

#include <stdio.h>

int main (void)
{
       char s[] = "teste de string para ponteiros";
       char *p = NULL;

       p = s+9;

       while (*p != '\0' && *p != ' ')
       {
               printf("%c",*p);
               p++;
       }

       puts("");

       return 0;
}


Agora veja a confusão. Espero que os comentários
estejam claros:

#include <stdio.h>
#include <string.h>

int main (void)
{
       char n_completo[1000];
       char *p = NULL;
       int i;

       printf("digite um nome completo:" );
       fgets(n_completo,1000,stdin);
       __fpurge(stdin);

       while(n_completo[i] != '\0')
       {
               if (n_completo[i] == ' ')
               {
                       ++i;
       //              printf("%d\n",i);
       //              printf("%c\n",*(n_completo+i));
                       /* aqui não funciona */
                       /* p = n_completo + i;*/
                       break;
               }
               i++;
       }
       p = n_completo + i;
       printf("tam p: %d\n",strlen(p));
       // aqui p++ funciona
       printf("%c",*p);
       p++;
       printf("%c",*p);
       p++;
       printf("%c",*p);
       p--;
       p--;
       puts("");
       i=0;
       /* por que não p++ aqui ?
        * atenção com linha a mais */
       while(*(p+i) != '\0' && *(p+i) != ' ')
       //while(*p != '\0' && *p != ' ')        
       {
               printf("%c",*(p+i));
               i++;
               //printf("%c",*p);
               //p++;
       }

       puts("");

       return 0;
}

Nesse segundo exercício a operação com ponteiro
não está funcionando dentro do loop. A primeira
tentativa de atribuir ao ponteiro um endereço na
string também não funciona. Acho que não estou
vendo algo que deve ser claro. O programa está uma
bagunça.

Alguém consegue ver ?


abraço,
Herbert

Ver perfil do usuário

2 usando uma função funciona em Dom Fev 14, 2016 5:06 pm

Não sei explicar o porque. O que é ruim.
Mas separando o loop while em uma função
funciona como esperado.

Talvez porque não esteja percorrendo a
string n_completo diretamente.

Fica assim:

char *acha_espaco(char *s);

int main (void)
{
char n_completo[1000];
char *p = NULL;
int i;

printf("digite um nome completo:" );
fgets(n_completo,1000,stdin);
__fpurge(stdin);

/* funciona tirando o while */
//p = &n_completo[8];

p = acha_espaco(n_completo);

while(*p != '\0' && *p != ' ')
{
printf("%c",*p);
p++;
}

puts("");

return 0;
}

char *acha_espaco(char *s)
{
while(*s != '\0')
{
if (*s == ' ')
{
return ++s;
}
s++;
}
return NULL;
}


abraço,
Herbert

Ver perfil do usuário

3 é isso: strings em Dom Fev 14, 2016 5:51 pm

É isso. strings não podem ser manipuladas
diretamente.

Ver perfil do usuário

Conteúdo patrocinado


Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo  Mensagem [Página 1 de 1]

Permissão deste fórum:
Você não pode responder aos tópicos neste fórum