Ir ao conteúdo

C Quero que um procedimento preencha o vetor de struct.


Ir à solução Resolvido por arfneto,

Posts recomendados

Postado

Esse código tem que ser estritamente .c 

Queria passar essa atividade de preencher uma struct com informações para uma função, como eu poderia fazer, nesse mesmo código? não tenho conhecimento nessa parte.

O código está incompleto -->

OBS: O código está bem mal feito pois estou em uma viagem urgente e tenho que estregar algo até da aqui algumas horas e estou sem internet somente móvel...

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

void novoCadastro();
void imprimirLista();
void encerrar();
void erro();

struct cliente{
	int codigo;
	char nome[31];
	int telefone;
	char email[51];
}; 

int main()
{
	setlocale(LC_ALL,"portuguese");
    struct cliente pessoa[5];
	int i, opcao;
	
	printf("1 -    Novo cadastro    --\n");
	printf("2 - Listar os cadastros --\n");
	printf("0 -         Sair        --\n");
	scanf("%d", &opcao);
	
	switch (opcao)
    {
	//aqui eu chamaria a função
    case 1: novoCadastro();
        break; 
    case 2: imprimirLista();
        break;
    case 0: encerrar(); 
		break;   
    default: erro();
        break;
    }
			 	
}

void novoCadastro()
{
	//nesse procedimento eu preencheria ela 
	int i;
	system("cls");
	printf("---Cadastro de clientes---");
  //if (pessoa[4].codigo == 5)
	if (pessoa[4].codigo != NULL)
		printf("Agenda lotada!!!");
	else{
		for (i = 0; i < 5; i++)
		{
			pessoa[i].codigo = i+1;
			printf("Digite o nome do cliente: \n");
			scanf("%30[^\n]s", pessoa[i].nome);
			printf("Digite o numero de telefone: \n");
			scanf("%d", & pessoa[i].numero);
			scanf("%50[^\n]s", pessoa[i].email);
		}
	}
}

 

  • Obrigado 1
Postado
18 minutos atrás, AnonymousLPH disse:

Esse código tem que ser estritamente .c

 

Que significa?

 

Mas qual a sua dificuldade afinal?

 

Sobre o programa:

 

O IDE que usa não cria as definições pra você automaticamente?

 

24 minutos atrás, AnonymousLPH disse:

Queria passar essa atividade de preencher uma struct com informações para uma função, como eu poderia fazer, nesse mesmo código

 

Apenas use parâmetros nas funções. E os valores de retorno. Nunca use void ou funções sem argumentos. É difícil não ser um erro.

 

Exemplos

 

void novoCadastro()

 

Isso é um buraco negro. Como não recebe nada nem retorna nada provavelmente não faz nada também. Ou depende de variáveis globais, o que é outra bobagem: sempre vai dar m#$d@.

 

Imagine que tivesse declarado assim, sem ponteiros nem nada, só um exemplo:


typedef struct
{
	int codigo;
	char nome[31];
	int telefone;
	char email[51];
}	Cliente;

typedef struct
{
	int limite;
	int total;
	Cliente	cl[30];
}	Cadastro;

int main()
{
	Cadastro	cad;

	cad.total = 0; // marca o cadastro como vazio
	cad.limite = 30;

...

 

Então antes de escrever algo já tem claro que um cadastro tem um certo número de itens. Começa vazio e vai até um limite.

 

Então novo cadastro podia ser

 

int novoCadastro(Cadastro*);

 

E imprimir cadastro? Que tal
 

void imprimirLista(Cadastro*);

E talvez pudesse então ler valores para o cadastro e retornar o total ... Entende a diferença?

 

Veja essa função de teste 

int novoCadastro(Cadastro* cad)
{
	Cliente modelo1 = {
		.codigo = 12,
		.nome = "cliente 12"
	};
	Cliente modelo2 = { 13,"cliente 13" };
	cad->cl[0] = modelo1;
	cad->cl[1] = modelo2;
	cad->cl[2] = modelo2;
	cad->cl[3] = modelo1;

	cad->total = 4;
	cad->limite = 30;
	return 4;
};

São duas maneiras de declarar um cliente para colocar num cadastro e retornar preenchido

 

Veja essa para imprimir

void imprimirLista(Cadastro* cad)
{
	printf("cadastro tem %d de %d clientes\n\n",
		cad->total, cad->limite);
	for (int i = 0; i < cad->total; i += 1)
		printf("%d ", cad->cl[i].codigo);
	return;
}

Entende como é mais simples?

 

Veja a saída 

cadastro tem 4 de 30 clientes

12 13 13 12

Desse programa copiado do seu em minutos

#include <stdio.h>

typedef struct
{
	int codigo;
	char nome[31];
	int telefone;
	char email[51];
}	Cliente;

typedef struct
{
	int limite;
	int total;


	Cliente	cl[30];
}	Cadastro;

void imprimirLista(Cadastro*);
int  novoCadastro(Cadastro*);

int main()
{
	Cadastro	cad;

	novoCadastro(&cad);
	imprimirLista(&cad);
	return 0;
};

void imprimirLista(Cadastro* cad)
{
	printf("cadastro tem %d de %d clientes\n\n",
		cad->total, cad->limite);
	for (int i = 0; i < cad->total; i += 1)
		printf("%d ", cad->cl[i].codigo);
	return;
}

int novoCadastro(Cadastro* cad)
{
	Cliente modelo1 = {
		.codigo = 12,
		.nome = "cliente 12"
	};
	Cliente modelo2 = { 13,"cliente 13" };
	cad->cl[0] = modelo1;
	cad->cl[1] = modelo2;
	cad->cl[2] = modelo2;
	cad->cl[3] = modelo1;

	cad->total = 4;
	cad->limite = 30;
	return 4;
};

Escreva assim em torno dos dados. É mais simples e seguro. Use argumentos. Retorne valores. Não use globais. Não escreva menus antes de testar a lógica. Use constantes e teste tudo antes.

 

 

 

 

  • Curtir 1
Postado

@arfneto Seu código está bem avançado pra mim, eu dei um jeito e fiz simples meu código porque não dava tempo.

Peguei e estudei um pouco sobre isso

5 horas atrás, arfneto disse:

cad->cl[0]

pois não estava entendendo, não vi isso na minha vida haha.

seria --> (*cad).cl[0] 

 

Meu professor me passou só o super básico pelo o que estou vendo, estou em C faz 4 semanas.

Estou mais ansioso pra aprender agora, só pelo fato de não ter entendido quase nada do seu código.

Eu estava usando o Dev c++ ultrapassado, mexi nas configurações pra c99

  • Curtir 1
Postado
5 horas atrás, arfneto disse:

Que significa?

precisava de um código que fosse estruturado somente em C, sem cpp no meio.

5 horas atrás, arfneto disse:

Mas qual a sua dificuldade afinal?

Eu quero achar um jeito de fazer uma função void percorrer um vetor de struct passado por referencia, e ir fazendo scanf das informações.

5 horas atrás, arfneto disse:

O IDE que usa não cria as definições pra você automaticamente?

Não.

5 horas atrás, arfneto disse:

Apenas use parâmetros nas funções. E os valores de retorno. Nunca use void ou funções sem argumentos. É difícil não ser um erro.

 

Obrigado pela dica, eu peguei essa de usar void sem argumentos de um cara que está avançado na UFMS SC, que bom que já vou pegar o caminho certo no começo!!!

typedef struct
{
	int codigo;
	char nome[31];
	int telefone;
	char email[51];
}	Cliente;

typedef struct
{
	int limite;
	int total;


	Cliente	cl[30];
}	Cadastro;

não entendi quase nada do que isso faz, nunca vi isso na vida, vou procurar uns exemplos pra tentar entender.

5 horas atrás, arfneto disse:

typedef struct 

tu fez isso para não precisar mais escrever struct para passar como parametro? ou para declarar?

 

5 horas atrás, arfneto disse:

cad.total = 0;

Eu iria atualizar o valor de cadastros até que de um total, assim eu não precisaria de um vetor de struct?

 

 

 

5 horas atrás, arfneto disse:

int novoCadastro(Cadastro*);

show

 

6 horas atrás, arfneto disse:

Cliente

Cliente pertence a Cadastro? por isso tu passou somente cadastro por referencia?

 

 

 

Nessa parte__>

int novoCadastro(Cadastro* cad)
{
	Cliente modelo1 = {
		.codigo = 12,
		.nome = "cliente 12"
	}; //não entendi esse ponto e virgula
	Cliente modelo2 = { 13,"cliente 13" };
  	//por que aqui está sem o .codigo e .nome
	cad->cl[0] = modelo1; // vou tentar aplicar isso com scanf e um contador...
	cad->cl[1] = modelo2;
	cad->cl[2] = modelo2;
	cad->cl[3] = modelo1;

	cad->total = 4; // aqui mostraria que foi cadastrado 4 clientes
	cad->limite = 30;
	return 4;
};

 

6 horas atrás, arfneto disse:

Entende como é mais simples?

 

SIMM!!!

 

 

6 horas atrás, arfneto disse:

Veja essa para imprimir

 

Estou estudando seu código e agora está fazendo todo sentido!!! que demais.

antes parecia grego pra mim!!!

 

 

 

 

adicionado 16 minutos depois

Se eu tirar o ponto e virgula do main, o que muda?

Postado

@arfneto Como eu faria algo do tipo -->

#include <stdio.h>
#include <stdlib.h>
  //esse meu código tá um problemão 

typedef struct
{
	int codigo;
	char nome[31];
	int telefone;
	char email[51];
}	Cliente;

typedef struct
{
	int limite;
	int total;


	Cliente	cl[30];
}	Cadastro;

void imprimirLista(Cadastro*);
int  novoCadastro(Cadastro*);

int main()
{
	Cadastro	cad;

	novoCadastro(&cad);
	imprimirLista(&cad);
	system("pause");
	return 0;
}

void imprimirLista(Cadastro* cad)
{
	printf("cadastro tem %d de %d clientes\n\n",
		cad->total, cad->limite);
		
	for (int i = 0; i < cad->total; i += 1)
		printf("%d", cad->cl[i].codigo);
	return;
}

int novoCadastro(Cadastro* cad)
{
	int i;
	
	for (i = 0; i < 4; i++)
	{
		printf("Digite o código do cliente %d\n", i+1);
		scanf("%d",&cad->cl[i].codigo);
		printf("Digite o nome do cliente %d\n", i+1);
		scanf("%d",&cad->cl[i].nome);
		
		cad->total = i+1;
	}
	cad->limite = 30;
	return 4;
};

 

  • Solução
Postado
10 horas atrás, AnonymousLPH disse:

pois não estava entendendo, não vi isso na minha vida haha.

seria --> (*cad).cl[0] 

 

Meu professor me passou só o super básico pelo o que estou vendo, estou em C faz 4 semanas.

Estou mais ansioso pra aprender agora, só pelo fato de não ter entendido quase nada do seu código.

Eu estava usando o Dev c++ ultrapassado, mexi nas configurações pra c99

 

 

Pode até escrever assim, mas não é comum. Quando se acessa a estrutura por endereço se usa ->. Mas claro que se cad é um ponteiro (*cad) é o valor e então pode usar '.' Já *cad é o que se chama de instância da estrutura apontada por cad.

 

10 horas atrás, AnonymousLPH disse:

Eu estava usando o Dev c++ ultrapassado, mexi nas configurações pra c99

 

Ao menos não estava usando o Code::Blocks. :) 

Muito importante isso que fez, porque a versão de 1989 é, digamos, de 1989. E não dá pra imaginar que nada tenha melhorado depois. E melhorou muito.

 

9 horas atrás, AnonymousLPH disse:

precisava de um código que fosse estruturado somente em C, sem cpp no meio

 

Não tenho a menor ideia do que possa ser isso. Pode explicar de outro modo? Que seria "cpp no meio"?

 

9 horas atrás, AnonymousLPH disse:

Eu quero achar um jeito de fazer uma função void percorrer um vetor de struct passado por referencia, e ir fazendo scanf das informações

 

Imagino que já saiba agora porque eu te mostrei um exemplo. E retornar void como eu disse em geral é um desperdício ou um erro mesmo. Veja que você pode por exemplo ter uma função 

	Cliente* fabrica();

que faz o contrário: não tem argumentos, mas a cada vez que você chama ela cria e devolve um item de cadastro completo. Muito conveniente, porque pode ser um registro de teste ou um de verdade e faz toda a diferença no desenvolvimento e na produção.

 

9 horas atrás, AnonymousLPH disse:
16 horas atrás, arfneto disse:

O IDE que usa não cria as definições pra você automaticamente?

Não.

 

Pois é: talvez devesse mudar desses ambientes mais antigos... CLion da jetbrains é sensacional. VS Code da Microsoft é muito bom, Visual Studio é o padrão no planeta. Eclipse é legal. Evite o Dev-C++. E se não te pagarem bem ou te apontarem uma arma ou te obrigarem de algum modo, evite o Code::Blocks.

 

Quanto a isso:

 

image.png.a9826fdf5eee87d83a2657f2e22c05a4.png

 

Isso É um exemplo! Pra que vai procurar um exemplo de um exemplo?

 

O que não entendeu? Basta ler o código: um cadastro tem um vetor de clientes.  limite marca, digamos, o limite: quantos cabem. total marca quantos tem dentro. Em geral se usa ao invés de Cliente[30] que está fixo, um vetor de clientes e você aloca dinamicamente e poe o quanto alocou em limite. Porque? Bem, digamos que se alocou 40 então 40 é o limite e total é zero já que não nenhum ainda, ao criar. É só isso: uma abstração da realidade. 

 

E cada Cliente[] é um... Cliente. Acho que já imaginava. Assim tem no exemplo 30 clientes e cada cliente tem esses 4 campos... email, nome, telefone e codigo.

 

E como acessar eu te mostrei também. Não acho que precise de outro exemplo da mesma coisa. Como preencher eu também te mostrei.

 

9 horas atrás, AnonymousLPH disse:
16 horas atrás, arfneto disse:

typedef struct 

tu fez isso para não precisar mais escrever struct para passar como parametro? ou para declarar?

 

 

As duas coisas. Assim você define um tipo e não precisa ficar repetindo struct toda hora. Mas também fica livre para mudar a definição do campo sem ter que mexer no resto do programa

 

9 horas atrás, AnonymousLPH disse:

Cliente pertence a Cadastro? por isso tu passou somente cadastro por referencia?

 

 

Exato. porque a realidade é assim: o cadastro tem clientes. Então ao invés de usar um vetor de clientes você passa um cadastro e põe os clientes dentro. E aí pode passar outras coisas, como o total de caras que tem dentro, o máximo que pode ter , o nome da loja, endereço e coisas assim. Pode ter um vetor de cadastros para todas as lojas, por exemplo, e mesmo assim não ter que mexer nas funções nem declarar um monte de variáveis. Isso é algo chamado na literatura de encapsulamento.

 

image.png.e9ea4040b8cb369b221998b171f59a23.png

 

Desse modo você pode inicializar só algumas variáveis da struct, as que precisa para o teste, e em qualquer ordem. É muito mais prático. Como deve ter visto, com o ponto você define o campo e depois dá o valor. Cliente é assim:

typedef struct
{
	int codigo;
	char nome[31];
	int telefone;
	char email[51];
}	Cliente;

Então se você só quer preencher o vetor pra testar a função de cadastro sem perder tempo lendo da tela pode só criar isso

modelo1 e modelo2

 

	Cliente modelo2 = { 13,"cliente 13" };
  	//por que aqui está sem o .codigo e .nome

Esse é o modo tradicional de inicializar, onde você põe os valores na ordem em que foram declarados na struct. Usando o ponto como antes você pode escrever em qualquer ordem, claro, já está dizendo o nome do campo...

 

Exemplo mais enjoado, e muito mais útil


Imagine que você quer criar um cadastro de teste com 3 clientes para testar seu programa. E tem lá a rotina novoCadastro() como antes.

Você pode declarar um cadastro com 3 caras e preencher direto:

	Cadastro teste =
	{
		.cl[2] = { 13, "cliente 2", 2, "email" }, // o terceiro cliente
      
      
		.limite = 30, 
		.total = 3, // os campos de controle fora de ordem
      
		.cl[1] = { -9813, "cliente um", 2, "email sdslk" }, // o segundo cliente
      
      
		.cl[0] = {
			.email = "WalkTheLine@b.c",
			.nome = "Jhonny Cash",
			.telefone = 912348765,
			.codigo = 3245
			} // o primeiro cliente com os valores fora de ordem
	};

Você só escreve o que você quer e o compilador se vira. Muito prático e se usa assim há décadas. Não sei porque não ensinam há décadas...

 

Veja o exemplo usando isso:

	Cadastro teste =
	{
		.cl[2] = { 13, "cliente 2", 2, "email" }, // o terceiro cliente
		.limite = 30,
		.total = 3, // os campos de controle fora de ordem
		.cl[1] = { -9813, "cliente um", 2, "email sdslk" }, // o segundo cliente
		.cl[0] = {
			.email = "WalkTheLine@b.c",
			.nome = "Jhonny Cash",
			.telefone = 912348765,
			.codigo = 3245
			} // o primeiro cliente com os valores fora de ordem
	};

	imprimirLista(&teste);

E veja o que mostra:

cadastro tem 3 de 30 clientes:
3245 -9813 13

Quer mostrar os detalhes do cadastro? Muda imprimirLista(). Entende como é muito mais produtivo?

 

O exemplo todo

Spoiler
#include <stdio.h>

typedef struct
{
	int codigo;
	char nome[31];
	int telefone;
	char email[51];
}	Cliente;

typedef struct
{
	int limite;
	int total;


	Cliente	cl[30];
}	Cadastro;

void imprimirLista(Cadastro*);
int  novoCadastro(Cadastro*);

int main()
{
	Cadastro	cad;

	Cadastro teste =
	{
		.cl[2] = { 13, "cliente 2", 2, "email" }, // o terceiro cliente
		.limite = 30,
		.total = 3, // os campos de controle fora de ordem
		.cl[1] = { -9813, "cliente um", 2, "email sdslk" }, // o segundo cliente
		.cl[0] = {
			.email = "WalkTheLine@b.c",
			.nome = "Jhonny Cash",
			.telefone = 912348765,
			.codigo = 3245
			} // o primeiro cliente com os valores fora de ordem
	};

	imprimirLista(&teste);

	novoCadastro(&cad);
	imprimirLista(&cad);
	return 0;
};

void imprimirLista(Cadastro* cad)
{
	printf("cadastro tem %d de %d clientes:\n",
		cad->total, cad->limite);
	for (int i = 0; i < cad->total; i += 1)
		printf("%d ", cad->cl[i].codigo);
	printf("\n\n");
	return;
}

int novoCadastro(Cadastro* cad)
{
	Cliente modelo1 = {
		.codigo = 12,
		.nome = "cliente 12"
	};
	Cliente modelo2 = { 13,"cliente 13" };
	cad->cl[0] = modelo1;
	cad->cl[1] = modelo2;
	cad->cl[2] = modelo2;
	cad->cl[3] = modelo1;

	Cadastro teste =
	{
		.cl[2] = { 13, "cliente 2", 2, "email" }, // o terceiro cliente
		.limite = 30, 
		.total = 3, // os campos de controle fora de ordem
		.cl[1] = { -9813, "cliente um", 2, "email sdslk" }, // o segundo cliente
		.cl[0] = {
			.email = "WalkTheLine@b.c",
			.nome = "Jhonny Cash",
			.telefone = 912348765,
			.codigo = 3245
			} // o primeiro cliente com os valores fora de ordem
	};

	cad->total = 4;
	cad->limite = 30;
	return 4;
};

 

 

adicionado 1 minuto depois

image.png.6e58f9bd6decdff84862e25dae48638e.png

 

 

Isso eu não entendi. Pode explicar qual o problema?

 

 

  • Obrigado 1
Postado
1 hora atrás, arfneto disse:

Isso eu não entendi. Pode explicar qual o problema?

Eu fiz um código que não funciona. Seria isso, vou tentar utilizar seu modelo, que vi que é mais fácil e intuitivo.

 

1 hora atrás, arfneto disse:

Não sei porque não ensinam há décadas...

Que bom que existem pessoas como você!

 

 

1 hora atrás, arfneto disse:

Isso eu não entendi. Pode explicar qual o problema?

Nesse código, tentei aplicar o seu modelo, usando scanf, mas foi falho, com essa clareada que tu me deu com os complementos, vou tentar aplicar. Ai trago um código que funcione, ou não pra você dar uma olhada! 

 

 

Na teoria tentei dizer que meu código não funciona 😕

Postado
9 minutos atrás, AnonymousLPH disse:

Nesse código, tentei aplicar o seu modelo, usando scanf, mas foi falho, com essa clareada que tu me deu com os complementos, vou tentar aplicar. Ai trago um código que funcione, ou não pra você dar uma olhada! 

 

 

 

Se eu te mostrei como criar tantos itens de cadastro quanto queira, porque está ledo do teclado, o que eu te disse pra não fazer NUNCA antes de terminar o programa?

 

Para ler uma string usando scanf() use o especificador certo %s

 

Eu sempre posto isso então vou repetir: scanf() não foi escrita para ler essas coisas.

 

scanf() é para scanf formatted input. Ler campos do teclado não é "entrada formatada". É possível, mas não devia. Use gets() para ler linhas ou getc() para ler caracteres. É como correr de meias: possível, mas provavelmente não compensa :) 

 

Postado

@arfneto Beleza, teve um cara que defendeu aqui no fórum pra mim que scanf também era viável, e que algumas pessoas só queriam "vender" o fgets ou gets, pois eu vi isso que tu disse em um fórum NA e fiquei na dúvida...

19 minutos atrás, arfneto disse:

scanf() é para scanf formatted input

 

 

mas em fim, consegui :

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

typedef struct
{
	int codigo;
	char nome[31];
	int telefone;
	char email[51];
}	Cliente;

typedef struct
{
	int limite;
	int total;


	Cliente	cl[30];
}	Cadastro;
/////////////
void imprimirLista(Cadastro*);
int  novoCadastro(Cadastro*);

int main()
{
	setlocale(LC_ALL,"portuguese");
	Cadastro	cad;

	novoCadastro(&cad);
	imprimirLista(&cad);
	system("pause");
	return 0;
};
/////////////
void imprimirLista(Cadastro* cad)
{
	int i;
	printf("cadastro tem %d de %d clientes\n\n",
		cad->total, cad->limite);
	for ( i = 0; i < cad->total; i += 1)
		printf("\t%d\n", cad->cl[0].codigo);
		printf("\t%s\n", cad->cl[0].nome);
	return;
}
/////////////
int novoCadastro(Cadastro* cad)
{
	Cliente modelo1; /*= {
		.codigo = 12,
		.nome = "cliente 12"
	};*/
	Cliente modelo2 ;   /*= { 13,"cliente 13" };*/
	printf("digite o código:");
	scanf("%d",&modelo1.codigo);
	fflush(stdin);
	printf("digite o nome");
	gets(modelo1.nome);
	
	cad->cl[0] = modelo1;
	//cad->cl[1] = modelo2;
	//cad->cl[2] = modelo2;
	//cad->cl[3] = modelo1;

	cad->total = 1;
	cad->limite = 30;
	return 1;
};



 

adicionado 17 minutos depois
2 horas atrás, arfneto disse:

Pode explicar de outro modo? Que seria "cpp no meio"?

Na minha facul, o professor envia códigos salvos em cpp, não sei se é por preguiça ou se tem alguns significados, as vezes ele manda códigos sem revisar, que não funciona, ai tenho q modificar algumas coisas e salvar em .cm pois a faculdade zera se for salvo em .cpp,  (faculdade digo, pois são vários professores). É EAD. E ele ainda vende o curso dele pra "tirar as dúvidas".

Postado
1 hora atrás, AnonymousLPH disse:

Beleza, teve um cara que defendeu aqui no fórum pra mim que scanf também era viável, e que algumas pessoas só queriam "vender" o fgets ou gets, pois eu vi isso que tu disse em um fórum NA e fiquei na dúvida

 

Não só é viável como é muito comum. Mas não é esperto. Se acompanhou alguma dessas quase religiosas discussões sabe o que acho ;)

 

Na prática, se precisa ter controle mesmo não usa nenhuma dessas. Mas para ler dados de entrada como esses de programas de estudantes o simples é o que eu disse: usae fgets() e leia em linhas, ou use fgetc() e leia as letras.

adicionado 2 minutos depois
1 hora atrás, AnonymousLPH disse:

E ele ainda vende o curso dele pra "tirar as dúvidas"

 

Wow genial esse

 

Mas não vou mesmo saber o que seria "cpp" nesse contexto. Poste algum desses qualquer hora. C++ é outra linguagem. Muito diferente.

Postado

@arfneto A confusão foi intimamente minha, acho que ele salvava o código nas lives em cpp por engano. E assim eu acha q o código dele estava em .cpp. Uma coisa bem bizarra da minha parte.

adicionado 16 minutos depois

@arfneto *Dúvida* - Porque tudo em C pode rodar em cpp?  (Se ele salvava em cpp e funcionava, mesmo sendo duas linguagens diferentes).

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades 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

×
×
  • Criar novo...