Why do not my strings concatenate correctly?

-4

I want to display information in the following format: last name / last name. But he jumps a line in the concatenation. At least that's what I think is happening ...

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


/*
Síntese
Objetivo: ler nome completo de uma pessoa e exibir, separado por uma barra, o último sobrenome e o primeiro nome
Entrada: Nome da pessoa
Saída: Ultimo sobrenome/Primeiro nome
*/

#define MAX_NOME 256
#define ERRO printf("\nSo pode conter letras!\n");
void apresentaNome(char * nome);
void leValidaTexto(char * msg, char * msgErro, char nome[]);
int main(int argc, char *argv[]) {
    char nome[MAX_NOME];
    leValidaTexto("Digite o nome completo:", "\nTexto invalido!\n", nome);
    apresentaNome(nome);
    return 0;
}
void leValidaTexto(char * msg, char * msgErro, char nome[]){


    int flag = 1, i=0;
    int tam;

    do{
        printf("%s", msg);
        fgets(nome, MAX_NOME, stdin);
        tam = strlen(nome)-1;

        if(tam==0){
            printf("%s", msgErro);
            flag = 0;
        }else{
            for(i=0; i < tam; i++){
                if(isdigit(nome[i])!=0){
                    ERRO
                    flag = 0;
                }else{
                    flag = 1;
                }
            }
        }

    }while(!flag);


}
void apresentaNome(char * nome){
    int i=0, j=0, k=0, p=0;
    char nomeAux[MAX_NOME], nomeAux2[MAX_NOME];
    char nomeAux3[MAX_NOME];
    char c = ' ', d = ' ';
    for(i=strlen(nome)-1; i>=0; i--){
        if(nome[i] == ' '){
            break;
        }

        c = nome[i];
        nomeAux[j] = c;
        j++;

    }
    //nomeAux[j] = '
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>


/*
Síntese
Objetivo: ler nome completo de uma pessoa e exibir, separado por uma barra, o último sobrenome e o primeiro nome
Entrada: Nome da pessoa
Saída: Ultimo sobrenome/Primeiro nome
*/

#define MAX_NOME 256
#define ERRO printf("\nSo pode conter letras!\n");
void apresentaNome(char * nome);
void leValidaTexto(char * msg, char * msgErro, char nome[]);
int main(int argc, char *argv[]) {
    char nome[MAX_NOME];
    leValidaTexto("Digite o nome completo:", "\nTexto invalido!\n", nome);
    apresentaNome(nome);
    return 0;
}
void leValidaTexto(char * msg, char * msgErro, char nome[]){


    int flag = 1, i=0;
    int tam;

    do{
        printf("%s", msg);
        fgets(nome, MAX_NOME, stdin);
        tam = strlen(nome)-1;

        if(tam==0){
            printf("%s", msgErro);
            flag = 0;
        }else{
            for(i=0; i < tam; i++){
                if(isdigit(nome[i])!=0){
                    ERRO
                    flag = 0;
                }else{
                    flag = 1;
                }
            }
        }

    }while(!flag);


}
void apresentaNome(char * nome){
    int i=0, j=0, k=0, p=0;
    char nomeAux[MAX_NOME], nomeAux2[MAX_NOME];
    char nomeAux3[MAX_NOME];
    char c = ' ', d = ' ';
    for(i=strlen(nome)-1; i>=0; i--){
        if(nome[i] == ' '){
            break;
        }

        c = nome[i];
        nomeAux[j] = c;
        j++;

    }
    //nomeAux[j] = '%pre%';
    //printf("%s", nomeAux);
    /*
    for(k=strlen(nomeAux)-1;k>=0;k--){
        d = nomeAux[k];
        nomeAux2[p] = d;
        p++;
    }
    */

    strrev(nomeAux);
    for(i=0; i < strlen(nome)-1; i++){
        while(nome[i]!= ' '){
            //printf("%c", nome[i]);
            nomeAux3[i] =nome[i];
            break;
        }
    }


    strcat(nomeAux, "/");
    printf("%s\n", strcat(nomeAux, nomeAux3));

}
'; //printf("%s", nomeAux); /* for(k=strlen(nomeAux)-1;k>=0;k--){ d = nomeAux[k]; nomeAux2[p] = d; p++; } */ strrev(nomeAux); for(i=0; i < strlen(nome)-1; i++){ while(nome[i]!= ' '){ //printf("%c", nome[i]); nomeAux3[i] =nome[i]; break; } } strcat(nomeAux, "/"); printf("%s\n", strcat(nomeAux, nomeAux3)); }
    
asked by anonymous 12.09.2018 / 21:10

1 answer

0

Well, I did not quite understand this problem, I fully re-read it, taking good ideas, well it does not accept numbers or spaces, to make it easier to show names, I stored in an array of characters and showed the first and last name, any questions please.

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

int verifica(char *frase);
void mostraNaTela(char *frase);
int main(int argc, char** argv)
{
   char nome[20];
   printf("Digite seu nome completo\n");
   scanf(" %[^\n]", nome);
   if(verifica(nome))printf("ERRO\n\n\n");
   else mostraNaTela(nome);

    return 0;
}

int verifica(char *frase)
{
   int i;
   for(i = 0; i < strlen(frase); i++)
   {
       if(!isalnum(frase[i]) && frase[i] != ' ')
       {
          return 1;
       }
       else if(frase[i] >= '0' && frase[i] <= '9')
       {
          return 1;
       }
   }
    return 0;
}


void mostraNaTela(char *frase)
{
   char nomes[30][30];
   char *ptr;
   int cont = 0;
   ptr = strtok(frase, " ");
   while(ptr != NULL)
   {
      strcpy(nomes[cont++], ptr);
      ptr = strtok(NULL, " ");
   }
    printf("%s\%s\n", nomes[0], nomes[cont - 1]);
}
    
12.09.2018 / 21:43