Logo Hardware.com.br
MARCZEWSKI
MARCZEWSKI Super Participante Registrado
655 Mensagens 17 Curtidas
#2 Por MARCZEWSKI
09/12/2008 - 23:14
jacquel disse:
Como eu faço em C para não usar o comando goto no programa? Existe alguma maneira para fazer isso?

Como assim nao usar???? (basta nao coloca-lo no codigo)

seria algo que vc so esta achando como fazer usando o goto, e que agora esta qrendo fazer sem o mesmo???(se for isso poste o q vc quer fazer sem o goto).

grato,
Estarei um pouco ausente do forum por um tempo!!!

Caso seja importante, mande MP(duvidas somente no forum)

grato,
jcferranti
jcferranti General de Pijama Registrado
4.7K Mensagens 162 Curtidas
#3 Por jcferranti
10/12/2008 - 00:10
jacquel disse:
Como eu faço em C para não usar o comando goto no programa? Existe alguma maneira para fazer isso?


Depende do seu nível como programador.

Se for um principiante, analise bem seu código. Tenho quase certeza que o caminho do goto pode ser substituido por uma simples função, ou quem sabe apenas um if.

Se for um programaodr profissional, aí o problema é complicado. Para vc chegar em uma situação que só o goto resolve, é possível que não exista outra alternativa, afinal o comando está lá justamente por isso.

PS.: Depois que conheci melhor a programação estruturada, Passei a não entender pq o goto é necessário.
Casa:MS Windows Seven (empolgando)
Trampo: MS Windows Seven (desapontando)

Quer um Fórum exclusivamente sobre Open Source? Aqui: www.linuxbsd.com.br/forum
jacquel
jacquel Novo Membro Registrado
31 Mensagens 0 Curtidas
#4 Por jacquel
10/12/2008 - 06:01
[php]
int main(void){


int op=0;

menu();

do{
printf("\n\nEscolha uma das 4 opcoes: ");
scanf("%d", &op);

}while(op<=0 || op>=6);

switch(op){

case 1:{

cadastro();
system("cls");
menu();
getchar();
}
case 2:
{

Pedido();
menu();
getchar();
}

case 3:{

mostra();
menu();
getchar();
}
case 4:{

modifica();
menu();
getchar();
}
case 5:

{

break;
}


}

}
[/php]
Bom é um programa que apresenta um menu.Eu quero que quando o usuário cadastre o cliente (por exemplo), o programa volte para o menu !Isso tava funcionando quando coloquei o goto em cada case
Trevas Arcanas
Trevas Arcan... Membro Senior Registrado
200 Mensagens 10 Curtidas
#8 Por Trevas Arcan...
10/12/2008 - 08:17
Só por curiosidade qual é o seu problema com o goto?Certos algoritmos só podem alcançar sua plena eficiência com ele, e o kernel do linux tem um a cada x linhas(não me lembro da estimativa mas era algo fora do padrão...)...Ele me parece bem útil(sem contar que os loops e demais estruturas como o switch não passam de combinações goto+if com pequenas diferenças entre si....)
"A alma é essa coisa que nos pergunta se a alma existe"
Mário Quintana
mcv
mcv Veterano Registrado
1.2K Mensagens 40 Curtidas
#9 Por mcv
10/12/2008 - 08:49
Dá uma olhada nesses posts:

https://www.hardware.com.br/comunidade/showpost/4087421.html
https://www.hardware.com.br/comunidade/showpost/3912810.html

Como explicado, goto só deve ser usado quando realmente necessário, que é o caso de kernels.


PS: Jackel, o problema de sair do programa quando não deve é por erro de lógica. Cole o código e veremos o que está errado.
tpcvasco
tpcvasco General de Pijama Registrado
2.9K Mensagens 330 Curtidas
#10 Por tpcvasco
10/12/2008 - 10:35
jcferranti disse:

Se for um principiante, analise bem seu código. Tenho quase certeza que o caminho do goto pode ser substituido por uma simples função, ou quem sabe apenas um if.
PS.: Depois que conheci melhor a programação estruturada, Passei a não entender pq o goto é necessário.


Meu primeiro professor de programação na faculdade (q era um cara bem f*da de programação, aliás) dizia q TODO e QUALQUER (e ele enfatizava bem esse TODO e QUALQUER) programa em C que tenha GOTO pode ser reescrito (com outras estruturas de controle de código) de forma q o GOTO desapareça, mantendo exatamente o mesmo funcionamento do código.
Realmente não conhecia esse lance dos kernel's, mas eu acredito q seja mais por uma questão de eficiência, e não por ser impossível fazer de outra forma.

mcv disse:
Você deve usar break em cada opção do switch. Exemplo:[php]case 1:
cadastro();
system("cls");
menu();
getchar();
break;
[/php]


Aliás, esse é o jeito mais "normal" de se fazer. Eu aprendi switch usando sempre o break.

Mas isso me leva a outra questão, esse link q o mcv passou diz
https://www.hardware.com.br/comunidade/showpost/4087421.html
"o GOTO quebra o fluxo de execução do programa jogando a bomba na sua mão, ou seja, você terá que gerenciar o fluxo. Isto pode ser trivial em um programa de 50 linhas, mas torna-se extremanente complicado em programas maiores."

Mas teoricamente o break e o continue dentro de loops tb quebram o fluxo de execução e não são tão "mal vistos"...
"Milhouse: - Médicos e bombeiros são heróis.
Bart Simpson: - Olha, as casas continuam pegando fogo e as pessoas continuam doentes. Os verdadeiros heróis são os Schwarzenegger's, os Stallone's, e, em menores proporções, os Vandame's..."
fenixagua
fenixagua Membro Senior Registrado
232 Mensagens 8 Curtidas
#12 Por fenixagua
10/12/2008 - 12:59
meu caro(a) jacquel,
se vc for uma iniciante tente ao extremo nunca usar um goto, eu sei que é muito dificil já que ele é tão, como vou dizer, atrativo como uma barra de chocolate porque se vc se acustumar escrevendo com goto's dai vai ser dificil para vc em programas complexos (a não ser em kernel's e afins).

mas se vc estiver numa situação do tipo a seguir então faça mas somente em casos excepicionais:

for (ini;teste;incremento){
for (ini;teste;incremento){
for (ini;teste;incremento){
for (ini;teste;incremento){
if(teste) goto escapa;
}
}
}
}
escapa:
...


PS: Agora apoiando o Trevas Arcanas, não crucifiquem demais o gotomostrando_lingua.png se querem algo preocupante que deva ser crucificado tomem o longjmp... hehehnao_quero_nem_ver.png
link: http://www.vivaolinux.com.br/artigo/Escrevendo-o-caos-em-C/?pagina=3
The Doug
The Doug Super Participante Registrado
890 Mensagens 10 Curtidas
#13 Por The Doug
10/12/2008 - 15:06
tpcvasco disse:
Meu primeiro professor de programação na faculdade (q era um cara bem f*da de programação, aliás) dizia q TODO e QUALQUER (e ele enfatizava bem esse TODO e QUALQUER) programa em C que tenha GOTO pode ser reescrito (com outras estruturas de controle de código) de forma q o GOTO desapareça, mantendo exatamente o mesmo funcionamento do código.
Realmente não conhecia esse lance dos kernel's, mas eu acredito q seja mais por uma questão de eficiência, e não por ser impossível fazer de outra forma.



Aliás, esse é o jeito mais "normal" de se fazer. Eu aprendi switch usando sempre o break.

Mas isso me leva a outra questão, esse link q o mcv passou diz
https://www.hardware.com.br/comunidade/showpost/4087421.html
"o GOTO quebra o fluxo de execução do programa jogando a bomba na sua mão, ou seja, você terá que gerenciar o fluxo. Isto pode ser trivial em um programa de 50 linhas, mas torna-se extremanente complicado em programas maiores."

Mas teoricamente o break e o continue dentro de loops tb quebram o fluxo de execução e não são tão "mal vistos"...



Esse esquema de todo goto poder ser escrito com outras estruturas é provado.

O kernel e muitos drivers utilizam gotos, principalmente em máquinas de estado, pois é mais eficiente.

Vale salientar tb q qq if é formado por 2 gotos.

Goto só deve ser abolido por questões de engenharia de software, pois do contrário não tem problema nenhum em usa-lo. Na maioria dos casos fica mais simples fazer com goto do q com if.
Visitem meu site:

www.infotalkers.com
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal