Ir ao conteúdo
  • Cadastre-se
Jão Marcos da Silva

C Meu For Nao Funciona

Recommended Posts

Bom eu estou com uma duvida nesse codigo, bom eu quero que ele faça o seguinte , o programa pergunta quantos clientes desejar cadastrar  coforme a quantidade de clientes q eu

digito, ele e pede o nome do cliente. Exemplo: se eu quero cadastrar 2 clientes , ele tem que pedir pra digitar o nome dos dois clientes , porém eu não estou conseguindo.

Obs: Estou Aprendendo C sou bem iniciante , Desde já agradeço a quem puder me ajudar.

 

 

 

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


int main(){

    char nome[100];
    int i, cliente;

    printf("\t\t\t\t|Sistema de Clientes|\n\n");
    printf("Quantos Clientes Serao Cadastrados ?: ");
    scanf("%i", &cliente);

    for(i=0;i<cliente;i++){

        system("cls");

        printf("Digite o Nome do Cliente: ");
        scanf("%c", &nome);

    }
    printf("Cliente Cadastrado!");

    return 0;
}

  • Curtir 1
  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Jão Marcos da Silva Você colocou %c no segundo scanf, %c é para um único caractere, ali é vetor de caracteres, deveria ser %s, pois trata-se de uma string. Só que, do jeito que está o seu código você só tá cadastrando um cliente de qualquer forma, pois está usando a mesma variável pra armazenar todos os nomes, faça o teste, coloque um printf("%s", nome); fora do for e você verá que só mostrará o último nome inserido.

  • Curtir 3

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Jão Marcos da Silva  Eis aqui o código que eu fiz, veja se ficou do jeito que você queria. @AnsiC Você poderia dar uma olhada nesse código e me falar como posso melhorá-lo (se não for incômodo), ficou meio limitado, pois só tem como colocar o primeiro nome dos clientes, se colocar nome completo com espaços acaba bugando. Tô até usando o "\b" que aprendi com você naquele código meu que você deu uma arrumada marota kkkk.

#include <stdio.h>
#include <locale.h>

int main () {
	
	setlocale(LC_ALL,"");
	
	struct cliente {
		
		char nome[50];
		
	};
	
	struct cliente dados [50];
	
	int quantidade, j, cont, l = 0;
	
	printf("\nInsira quantos clientes deseja cadastrar: \t [  ]\b\b\b");
	scanf("%d", &quantidade);
	
	for (int i = 0; i < quantidade; i++) {
		j++;
		printf("\n\nInsira o nome do %dº cliente: \t", j);
		scanf("\n%s", dados[i].nome);
		cont++;
	}
	cont--;
	printf("\nEis a lista de todos os clientes cadastrados:");
	for (int k = 0; k < cont; k++) {
		l++;
		printf("\n %dº cliente cadastrado: %s ", l, dados[k].nome);	
	}
	
	return 0;	
}

 

adicionado 8 minutos depois

@Jão Marcos da Silva Qualquer coisa nesse código aí que você não entender o por que de estar ali me fala que te explico, tranquilo?

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante

@Batata Defumada Olá. Para resolver a questão q você mencionou de só ser possível colocar o primeiro nome poderia resolver dessa forma:

scanf("%[^\n]", &dados[i].nome);

Obs: Para um código com o seu, recomendo uma função para limpar a sujeira do buffer. Poderia ser essa: 

void limpa_linha() {
    scanf("%*[^\n]");
    scanf("%*c");
}

E aí depois de cada scanf fazer a chamada a essa função. Algo assim:

printf("\nInsira quantos clientes deseja cadastrar: \t [  ]\b\b\b");
scanf("%d", &quantidade);
limpa_linha();

 

  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@giu_d Opa, muito obrigado mano, funcionou direitinho.  Isso de limpar o buffer faz milagre em? Tava testando o método que você mostrou pra colocar nome completo das pessoas e não deu certo até eu usar a função.

Agora tô tentando implementar um menu, onde o usuário possa escolher cadastrar clientes, ver a lista de todos os clientes cadastrados e também sair do programa se desejar, tava tentando isso "ontem" (já era madrugada), mas por algum motivo com o menuzinho não deu certo, acho que o tanto de contadores que eu coloquei (cont, j, l) acabaram ficando meio bugados quando coloquei os "if".

adicionado 3 minutos depois

@Jão Marcos da Silva No momento, o código está assim:

#include <stdio.h>
#include <locale.h>

void limpa_linha();

int main () {
	
	setlocale(LC_ALL,"");
	
	struct cliente {
		
		char nome[50];
	};
	
	struct cliente dados [50];
	
	int quantidade, j, i, k, cont, l = 0;
	
	printf("\nInsira quantos clientes deseja cadastrar: \t [  ]\b\b\b");
	scanf("%d", &quantidade);
	limpa_linha();
	
	for (i = 0; i < quantidade; i++) {
		j++;
		printf("\n\nInsira o nome do %dº cliente: \t", j);
		scanf("%[^\n]", dados[i].nome);
		limpa_linha();
		cont++;
	}
	printf("\nEis a lista de todos os clientes cadastrados:");
	for (k = 0; k < cont; k++) {
		l++;
		printf("\n %dº cliente cadastrado: %s ", l, dados[k].nome);	
	}
	
	return 0;	
}

void limpa_linha() {
    scanf("%*[^\n]");
    scanf("%*c");
}

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá tudo bem?

 

Um cardápio implementa-se dentro e foram da função main. Para esse exercício implementei dentro da função main. Então dentro da main fiz aquilo que é do menu, e suas funções implementadas com switch-case, por exemplo:

#include  <stdio.h>     /**< os padrões de entrada e saída. */ 
#include <locale.h>     /**< os padrões de localidade.      */


int main (int argc, char **argv){
    int quantidade, cont =  0;
    struct cliente{ char nome[50]; };

	
    printf ("\n");
    setlocale (LC_ALL,"");

    printf ("Insira quantos clientes deseja cadastrar: \t [ ]\b\b");
    scanf (" %d", &quantidade);

    /* nova strutc dados */
    struct cliente__dados{ struct cliente dados[quantidade]; };
    struct cliente__dados clientes;
    int opt;
	
    lbmenu : 
    printf ("Opções do Sistema\n");
    printf ("[1]: Cadastrar Clientes\n");
    printf ("[2]: Exibir os Clientes já cadastrados\n");
    printf ("[3]: Encerrar\n");
    
    printf ("[ ]\b\b");
    scanf (" %d", &opt);
    
    switch (opt){
        case 1 : printf("\n\n");
                 for (int i =  cont =  0; i  <  quantidade; i ++) {
                       printf("Insira o nome do %dº cliente: \t", i + 1);
                       scanf(" %[^\n]", clientes.dados[i].nome);
                       /* limpa_linha () */
                            scanf("%*[^\n]");
                            scanf("%*c");
                       cont ++; }
                 printf ("\n\n");
                 break;
	
        case 2 : printf ("\n");
                 printf("Eis a lista de todos os clientes cadastrados:");
                 for (int k =  0; k  <  cont; k ++) {
                       printf ("\n ");
                       printf ("%dº cliente cadastrado: ", k + 1);
                       printf ("%s", clientes.dados[k].nome); }
                 printf ("\n\n");
                 break;

        case 3 : printf ("Bye !!!\n\n");
                 return  0;
 
        default : printf ("<!> Erro opção invalida\a");
                  printf ("\n\n"); }
        goto lbmenu; /* jump para cardápio */
	return  0; }

 

Ok tchau!

 

adicionado 17 minutos depois

Faltou a variável cont;

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×