Ir para conteúdo
Fórum Script Brasil
  • 0

Ponteiro


Lucksky

Pergunta

Boa tarde pessoal,

Estou querendo fazer um programinha que apareça a primeira palavra de uma frase apos eu digitar e teclar <enter> ,e depois a próxima palavra apareça abaixo da primeira e depois ao final apareça toda a frase completa.Sei que usando ponteiros consegue-se fazer isso mas não sei onde usar segue o que eu já fiz ,mas este exemplo apareçe a frase toda.

#include ,stdio.h>
          #define MAX 10 
          int main()
   { 
   char frase[MAX];
   printf ("Digite uma frase:");
   fgets(frase, MAX, stdin);
   printf("%s",frase);
   }

sds

Luck

Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0

não sei se entendi direito o seu problema. Voce quer que a primeira palavra da frase apareca na primeira linha e o resto da frase na segunda? Se for isso, da pra fazer dessa forma:

#include <stdio.h>
#define MAX 100/*precisa ser maior pra pegar uma frase inteira*/

int main(){
char *aux;/*vamos usar pra encontrar o fim da primeira palavra*/

/*seu codigo ate depois do fgets vem aqui*/
aux = frase;
/*por algum motivo, o forum esconde o caractere de fim de string que é o barra-invertida0. Quando for usar esse codigo, tire os espacos entre o barra-invertida e o zero*/
while (*aux != ' '  && *aux != '\ 0') aux++;/*estou percorrendo o vetor frase procurando um espaco ou o fim (\ 0)*/
if (*aux == ' ') {
    *aux = '\ 0';
    aux++;
}
printf("%s\n", frase);
printf("%s\n", aux);

O problema dessa solucao é que ela não preserva a informacao do vetor inicial (frase). Pra preservar, voce pode usar um vetor auxiliar e copiar a frase original para ele com a funcao strcpy, da biblioteca strings.h

Editado por Jonas de Abreu
Link para o comentário
Compartilhar em outros sites

  • 0

Eu aproveitei essas dicas suas e montei e ficou assim:

#include <stdio.h>
#define MAX 100
int main(){
    char frase[MAX];
    char *sptr;
    sptr=frase;
    printf ("Digite uma frase:");
    fgets(frase,MAX,stdin);
    while(*sptr!=´´)
    if (*sptr==´´){
        sptr++;
        }
    printf ("%s\n",frase);
    printf ("%s\n",sptr);
}

mas está dando um erro - stray´\180´ qua não sei o que é.

Link para o comentário
Compartilhar em outros sites

  • 0

Sugestão:

#include <stdio.h>
#include <string.h>
#define MAX 100

int main(){
    char frase[MAX];
    char* p;
    char temp[MAX];
    int i;

    p=frase;

    printf ("Digite uma frase:");
    fgets(frase,MAX,stdin);
    
    for(i=0;i<strlen(frase);i++){
         if(*(p+i)==' ')
             break;
         else
             temp[i] = *(p+i);
    }
    printf("\n%s",temp);
}

Link para o comentário
Compartilhar em outros sites

  • 0

tente assim:

#include <stdio.h>
#include <string.h>
#define MAX 100

int main(){
    char frase[MAX];
    char* p;
    char temp[MAX];
    int i,j=0;

    p=frase;

    printf ("Digite uma frase:");
    fgets(frase,MAX,stdin);
    
    for(i=0;i<strlen(frase);i++){
         if((*(p+i)==' ')||(*(p+i)=='\n')){ //quando chegar ao espaco ou avanco de linha corta a palavra
             temp[j]='\ 0'; // corta a palavra
             printf("%s\n",temp); //imprime a palavra
             sleep(3); //dorme 3 segundos
             j=0; //zera o indice da variavel temp
         }
         else{
            temp[j] = *(p+i);
            j++;
         }
    }
    printf("%s\n",frase);
}

editado: Problemas ao exibir o barra zero. No if é espaco ' ' e avanco de linha '\n'

Editado por kandrade
Link para o comentário
Compartilhar em outros sites

  • 0

aqui não da erro nenhum,

bom copia o codigo do Felipe e faca essas modificacoes:

insira isso dentro do for:

if((*(p+i)==' ')||(*(p+i)=='\n')){ //quando chegar ao espaco ou avanco de linha corta a palavra
             temp[j]='\ 0'; // corta a palavra
             printf("%s\n",temp); //imprime a palavra
             sleep(3); //dorme 3 segundos
             j=0; //zera o indice da variavel temp
         }
         else{
            temp[j] = *(p+i);
            j++;
         }
crie a variavel j, não esqueca de zera-la.
int j=0;
e por fim altere o ultimo printf, assim:
printf("%s\n",frase);

o unico erro que pode dar é com a funcao sleep, é só verificar alguma funcao que a substitua

compilado no gcc

abraco!!!

Link para o comentário
Compartilhar em outros sites

  • 0

acabei de compilar no dev

#include <stdio.h>
#include <conio.h>
#include <string.h>
#define MAX 100

int main(){
    char frase[MAX];
    char* p;
    char temp[MAX];
    int i,j=0;

    p=frase;

    printf ("Digite uma frase:");
    fgets(frase,MAX,stdin);
    
    for(i=0;i<strlen(frase);i++){
         if((*(p+i)==' ')||(*(p+i)=='\n')){ //quando chegar ao espaco ou avanco de linha corta a palavra
             temp[j]=''; // corta a palavra
             printf("%s\n",temp); //imprime a palavra
             getch(); //dorme 3 segundos
             j=0; //zera o indice da variavel temp
         }
         else{
            temp[j] = *(p+i);
            j++;
         }
    }
    printf("%s\n",frase);
    getch();
}

o vi não é compilador, ele é um editor.

;)

Link para o comentário
Compartilhar em outros sites

  • 0
#include <stdio.h> 
#define TAM 30 
main(){ 
    char str[TAM]; 
    char *aux; 
    aux = str; 
    printf("Digite um texto: "); 
    fgets(str,TAM,stdin); 
    while(*aux != '') 
              if(*aux == ' ') 
                       aux++; 
              else if(*aux == '\t' )                      
                       aux++; 
              else{ 
                       while(*aux != ' ' && *aux != '\t'){ 
                                   printf("%c",*aux); 
                                   aux++; 
                       } 
                       printf("\n"); 
              } 
}

Valeu kleber to colocando outra maneira que consegui também.

Eu me expressei mal,eidtei pelo vi do linux e compilei usando gcc -o prog prog.c ..

[],s

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...