Logo Hardware.com.br
Eicar
Eicar Membro Senior Registrado
209 Mensagens 4 Curtidas

Problemas no compilador Dev-C++

#1 Por Eicar 23/08/2007 - 17:31
Fala pessoal...

to aprendendo C agora, e to usandu o compilador Dev-C++ para compilar meus programas em C. Uso ele ja ha um mes, mas de hoje pra k ele começou a dar um problema em todo programa que faço...

Ex.: Programa de soma dois numeros...



#include

int soma(int x,int y)
{
return(x+y);
}

main ()
{
int resultado;
resultado=soma (15,25);
printf("O resultado da soma eh %d",resultado);
return(0);
}


quando vou compilalo aparece um erro no compilador:

[Linker error] undefined reference to [EMAIL="'WinMain@16'"]'WinMain@16'[/EMAIL]
Id returned 1 exit status

fiquei_triste.png

alguem se manifesta????
Eicar
Eicar Membro Senior Registrado
209 Mensagens 4 Curtidas
#5 Por Eicar
24/08/2007 - 11:17
msm c/ int num tava funcionandu... grr

tive que desinstalar ele e instalalo denovo!

axu q era problema num compilador msm...

philix disse:
Velho, tu é lerdo demais, teve um tópico que a gente falou mais de mil vezes que tem que botar um int ou void(não ANSI) na função main!

O código tá beleza, mas tu esquece do tipo de dado da função main.


to trabalhandu c/ padrão ANSII...
intruso
intruso Tô em todas Registrado
1.8K Mensagens 41 Curtidas
#9 Por intruso
27/08/2007 - 11:29
david.rj.2k disse:
se não estou enganado, é necessário vc add a lib do windows.h ou talvez a iostream.h...
e o certo é SYSTEM("pause");
mesmo assim, se não der certo, coloka um while no final, e espere por uma tecla qlqr

FLWS!


nenhuma das duas, para usar a função system você deve fazer referencia ao cabeçalho "stdlib.h", veja a referencia:

http://www.cppreference.com/stdother/system.html

use esse site para consultar a biblioteca padrão para o ANSI C.

abraço.
Eicar
Eicar Membro Senior Registrado
209 Mensagens 4 Curtidas
#10 Por Eicar
27/08/2007 - 12:58
Fala pessoal...

to c/ uma duvida aki... estou escrevendu um programa qui vai mostrar a string digitada, trocar seus caracteres 'a' por 'b', mostrar a string trocada e mostrar qts caracteres foram modificados!

segue o codigo...

#include
int main()
{
printf("Programa basico, que le sua string, troca os caracteres 'a' por 'b', fornece a string modificada e o numero de caracteres trocados!");
char string[100];
int x, cont;
printf("\n\nEntre com uma string... ");
gets (string);
printf("String digitada:\n%s",string);
cont=0;
for(x=0;string[x]!='\0';x++)
{
if(string[x]=='a')
cont=cont+1;
}
printf("\n\nQuantidade de caracteres 'a' na frase= %d",cont);
for(x=0;string[x]!='\0';x++)
{
if(string[x]=='a')
string[x]='b';
}
printf("\n\nString trocada os caracters 'a' por 'b'=%s",string);
int troca;
if(string[x]=='b')
troca=troca+1;
printf("\n\nO numero de caracteres trocados eh: %d",troca);
while(1);
return(0);
}

ele da tudu certinhu, soh qui na hora de mostrar os caracteres modificados, ele fornece um numero q num tem nada haver c/ a soma de caracteres... modificados!

por favor, me digam ond esta o erro! (PS.: Estou usandu o padrão ANSII)
jofrelscalvet
jofrelscalve... Veterano Registrado
1.3K Mensagens 51 Curtidas
#11 Por jofrelscalve...
27/08/2007 - 18:22
Nos compiladores que eu me acostumei, declarar uma variavel no meio do código era inválido (como a sua troca).
A variavel troca não foi inicializada. Ela começa valendo o que o programa passado deixou naquela posição de memória e a esse valor você soma o numero de 'b's da string. Que aliás pode ser diferente do número de caracteres trocados se a string inicial tinha algum 'b'
while(1) é uma forma especialmente ruim de pausar o programa após sua execução, uma vez que deve continuar consumindo processamento (não me espantaria se você usasse 100% do processador num programa que já "acabou")
philix
philix Super Participante Registrado
946 Mensagens 14 Curtidas
#12 Por philix
27/08/2007 - 18:49
Use as tags code para seu código:

assim:

[php]
#include

int main()
{
printf("Programa basico, que le sua string, troca os caracteres 'a' por 'b', fornece a string modificada e o numero de caracteres trocados!");

char string[100];
int x, cont;

printf("\n\nEntre com uma string... ");
gets (string);
printf("String digitada:\n%s",string);

cont=0;

for(x=0;string[x]!='\0';x++)
{
if(string[x]=='a')
cont=cont+1;
}

printf("\n\nQuantidade de caracteres 'a' na frase= %d",cont);

for(x=0;string[x]!='\0';x++)
{
if(string[x]=='a')
string[x]='b';
}

printf("\n\nString trocada os caracters 'a' por 'b'=%s",string);

int troca;

if(string[x]=='b')
troca=troca+1;

printf("\n\nO numero de caracteres trocados eh: %d",troca);
while(1);
return(0);
}

[/php]

Como eu faria com 1 único loop:

[php]
#include

int main()
{
printf("Programa basico, que le sua string, troca os caracteres 'a' por 'b', fornece a string modificada e o numero de caracteres trocados!");

char string[100];
int x, cont, troca;

printf("\n\nEntre com uma string... ");
gets (string);
printf("String digitada:\n%s",string);

cont=0;

for(x=0;string[x]!='\0';x++)
{
if(string[x]=='a') {
cont=cont+1;
string[x]='b';
troca=troca+1;
}
}

printf("\n\nQuantidade de caracteres 'a' na frase= %d",cont);

printf("\n\nString trocada os caracters 'a' por 'b'=%s",string);

printf("\n\nO numero de caracteres trocados eh: %d",troca);

while(1);
return(0);
}
[/php]

Por que vc usou 3 loops idênticos?

O código que eu fiz é mais que três vezes mais rápido que o seu, pois executa um terço dos ifs que o seu executa e menos incrementos nas variáveis de controle dos loops.

ele da tudu certinhu, soh qui na hora de mostrar os caracteres modificados, ele fornece um numero q num tem nada haver c/ a soma de caracteres... modificados!


Isso ocorre pq vc não estava contando quantos 'a' foram trocados, mas sim qunatos 'b' existiam na string após as trocas(o que é diferente, não acha?)

flws
Eicar
Eicar Membro Senior Registrado
209 Mensagens 4 Curtidas
#13 Por Eicar
31/08/2007 - 11:26
philix disse:
Use as tags code para seu código:

assim:

[php]
#include

int main()
{
printf("Programa basico, que le sua string, troca os caracteres 'a' por 'b', fornece a string modificada e o numero de caracteres trocados!");

char string[100];
int x, cont;

printf("\n\nEntre com uma string... ");
gets (string);
printf("String digitada:\n%s",string);

cont=0;

for(x=0;string[x]!='\0';x++)
{
if(string[x]=='a')
cont=cont+1;
}

printf("\n\nQuantidade de caracteres 'a' na frase= %d",cont);

for(x=0;string[x]!='\0';x++)
{
if(string[x]=='a')
string[x]='b';
}

printf("\n\nString trocada os caracters 'a' por 'b'=%s",string);

int troca;

if(string[x]=='b')
troca=troca+1;

printf("\n\nO numero de caracteres trocados eh: %d",troca);
while(1);
return(0);
}

[/php]

Como eu faria com 1 único loop:

[php]
#include

int main()
{
printf("Programa basico, que le sua string, troca os caracteres 'a' por 'b', fornece a string modificada e o numero de caracteres trocados!");

char string[100];
int x, cont, troca;

printf("\n\nEntre com uma string... ");
gets (string);
printf("String digitada:\n%s",string);

cont=0;

for(x=0;string[x]!='\0';x++)
{
if(string[x]=='a') {
cont=cont+1;
string[x]='b';
troca=troca+1;
}
}

printf("\n\nQuantidade de caracteres 'a' na frase= %d",cont);

printf("\n\nString trocada os caracters 'a' por 'b'=%s",string);

printf("\n\nO numero de caracteres trocados eh: %d",troca);

while(1);
return(0);
}
[/php]

Por que vc usou 3 loops idênticos?

O código que eu fiz é mais que três vezes mais rápido que o seu, pois executa um terço dos ifs que o seu executa e menos incrementos nas variáveis de controle dos loops.



Isso ocorre pq vc não estava contando quantos 'a' foram trocados, mas sim qunatos 'b' existiam na string após as trocas(o que é diferente, não acha?)

flws


podiscre philix... issu se chama retundância! cap_feceiro.png:

tava pensandu aki.. sera por issu qui o kernel do linux eh bem menor do q o do windows???

codigo mal estruturadu ?¿
philix
philix Super Participante Registrado
946 Mensagens 14 Curtidas
#14 Por philix
31/08/2007 - 21:53
podiscre philix... issu se chama retundância!

tava pensandu aki.. sera por issu qui o kernel do linux eh bem menor do q o do windows???

codigo mal estruturadu ?¿


Para programar em C tem que ser detalhista...
Seu código estava extremamente mau feito :-)
O meu código é a versão suportável para quem o lê(programador cansado) e executa(computador cheio de outras coisa para fazer), mas ainda tem um monte de coisa que poderia ser melhorada.

tava pensandu aki.. sera por issu qui o kernel do linux eh bem menor do q o do windows???


Sim e também tem:
- filosofia KISS no desenvolvimento do Linux
- o cara que faz ele (Linus) se empolga em ver o código organizado
(tem até papel de parede que são trechos do código do kernel)
- o cara que faz o kernel do Windows faz o kernel para ganhar dinheiro(nada contra, mas quando o cara faz somente pq gosta aumenta muito a qualidade não acha?)
- o cara que faz o kernel do windows não precisa se preocupar em fazer um código que o mundo todo entenda(basta que os empregados da Microsoft entendam)

Vc já viu algum arquivo do kernel do Linux? os caras são MUITO organizados, o código no sentido de formatação é impecável, não deve ser diferente nas funcionalidades

Pense assim:

Sempre tem um jeito de fazer o código mais otimizado, se vc não pretende fazer códigos otimizados esqueça programação em C, eu ainda tenho que aprender mais sobre alocação de memória...

flws
Eicar
Eicar Membro Senior Registrado
209 Mensagens 4 Curtidas
#15 Por Eicar
12/09/2007 - 09:38
Estou c/ outra duvida...

Estou aprendendo sobre o operador ?

segue o codigo

[php]

#include
int main()
{
int index=0, contador;
char letras[5]="Joao";
for(contador=0;contador<1000;contador++)
{
printf("\n%c",letras[index]);
index="(index"4)?index="0:"++index;
}
while(1);
return(0);
}

[/php]

copiei exatamente do curso, soh acrescentei o while e o return... e naum esta funcionandu nu meu compilador???
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal