Mount a string with user-delimited size and can be parsed character by character

Asked

Viewed 15 times

-1

I need to keep several names (compounds) of different people, so that I can return to the user the first letters of each name, and the last name of each person. That’s what I’ve done so far:

#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#define T 100
int main(){

    char texto[T], texto2[200],texto1[T], texto3[T],logins, ultimo[100],*ultimo2;
    char *a = texto;
    int n = 0, conta = 0, k, i, p;
    printf("Quantos nomes serao cadastrados: ");
    scanf("%i",&k);
    for(int x=1;x<=k;x++){

            printf("\nDigite um nome completo: ");
            //texto2 armazena os nomes completos, e tem seu valor alterado a cada looping
            scanf(" %[^\n]s",texto2);

            for (i = 0;texto2[i] != '\0';i++){
                    if (texto2[i] == ' ' && texto2[i+1] != ' ')
                        conta++;
                }
            //Exibir o numero de palavras do nome atual.
            //printf("%i\n",conta+1);
            //colocando o strcat(texto,texto2); dentro de um if eu so armazeno espaço na memoria se a string tiver 3 palavras, caso
            //contrario ele não armazena, entao não precisa de um else.
            while( conta +1 <3){
                //contador é zerado no inicio dese bloco de instrução
                conta=0;
                printf("\nDigite um nome completo, com pelo menos 3 palavras: ");
                scanf(" %[^\n]s",texto2);
                //contador
                 for (i = 0;texto2[i] != '\0';i++){
                    if (texto2[i] == ' ' && texto2[i+1] != ' ')
                        conta++;
                }

            }
            if (conta +1 >= 3){
                strcat(texto,texto2);
                //Texto recebe texto2 e logo em seguida recebe uma virgula
            }
            //Esse if remove o bug da virgula no final
            if (x!=k) {
                    strcat(texto,", ");
            }
            conta = 0;
            //a variavel conta precisa ser igualada a zero a cada looping, porque se naão ela vai ficar so aumentando permanentemente.
            }

    do {
        printf("MENU DE OPCOES\n 1- Lista de nomes completos\n 2- Listar o ultimo nome de cada pessoa\n 3- Listar o nome de login\n 4- Sair\n");
        printf("Digite a opcao desejada\n\t\t>>>");
        scanf("%d", &p);


        switch(p){
        case 1:  printf(" Os nomes listados sao %s\n", texto);
        break;
        case 2: while(*a){
        if(*a == ' '){
            ultimo2 = a + 1;
            *a = 0;
        }
        a++;
        }
        printf("O ultimo nome sera: %s\n",ultimo2);

        break;
        case 3:

            printf("O nome de login e:  \n", texto);
        break;
        case 4: return 0;
        break;
    }
    }
  while (p != '4');
    //Exibindo a variavvel texto so pra ter certeza que ta tudo dando certo.
    printf("texto - %s",texto);

return 0;
}
  • Please Edit the Question to limit it to a specific problem with enough Detail to identify an adequate Answer.

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.