[C] Problema - não executa a função invocada

Dak

Power Member
Boa noite!

Preciso aqui de uma ajudinha com o meu programa. Ao que parece ele não reclama erros mas não faz o que é suposto.

Fica aqui uma forma reduzida do dito cujo...

Código:
#include <stdio.h>

int menu (void)

int ordemDeDivisor( int n, int m );

int main (void) {
  int opcao = -1;
  int n, m;
  
  while ( opcao != 0 ) {
    opcao = menu( );
    switch ( opcao ) {

    case 1:  
printf( "Introduza n: " ); 
scanf( "%d", &n );
break;

    case 2:
      printf( "Introduza m: " ); 
      scanf( "%d", &m );
      ordemDeDivisor( n, m );
      break;
    case 0: 
    ...
      break;
    default:
     ...
      break;
    } 
}
  
  return 0;
}

int ordemDeDivisor( int n, int m ){
 int pot=m;
 int k=0;

 while(pot < n){
   if(n%pot == 0)
     pot = pot * m;
     k=k+1;  
 }
    printf("%d eh divisor de %d de ordem %d\n", m, n, k);
return 0;
}
O programa deveria de correr mais ou menos assim

Menu
1 - Introduzir um inteiro n
2 - Introduzir inteiro m e calcular a sua ordem de divisor de n
0 - Sair
Introduza uma opcao: 1
Introduza n: 600
Menu
1 - Introduzir um inteiro n
2- Introduzir inteiro m e calcular a sua ordem de divisor de n
0 - Sair
Introduza uma opcao: 2
Introduza m: 2
2 eh divisor de ordem 3 de 600
Sendo que o que está a vermelho não chega a aparecer. Não sei como chamam ao fenómeno fantástico que é esse em que sou obrigado a fechar o terminal (sei que ha outra forma mas nao sei qual e) para voltar correr o programa.

Já tentei tirar o printf da função, fazer return k e depois na main escrever o printf("%d eh divisor de %d de ordem %d\n", m, n, ordemDeDivisor( n, m )); mas o resultado é o mesmo. O que é estranho pois fiz mais ou menos o que tenho no primeiro quote noutra função também neste programa mas a diferença é que o printf na função estava num if

PS: Não sei se é importante( não deve ser) mas o programa tens mais case's e mais funções mas nenhuma com problemas.

Obrigado desde já ;)
 
Última edição:
tens:

Código:
case 2:
printf( "Introduza m: " ); 
scanf( "%d", &m );
ordemDeDivisor( n, m ); //Ao invocares esta função qual o valor de n ?!
break;
 
Última edição pelo moderador:
então tenho de por um if dentro do if mas depois que raio e que ponho no segundo if ? (tá me a dar uma branca de tanto tempo com isto a frente :S)

edit:
se fizer uma coisa assim vai aprecer muito mal? vai me resolver o problema?
Código:
while(pot < n){
   if(n%pot == 0)
     pot = pot * m;
     k=k+1
       if(n%pot != 0)
         pot=n;
 }
 
Última edição:
Código:
int pot=m;
 int k=0;

 while(pot < n){
   if(pot == 1){
     k=n;
     pot=n;
  }
   else
     if(n%pot == 0)
       pot = pot * m;
       k++; 
         if(n%pot != 0)
           pot=n;
 }
   printf("%d eh divisor de %d de ordem %d\n", m, n, k);
return 0;
}
mas aqui se n for por exemplo 20 e m for 1 vai me dizer: "1 eh divisor de 20 de ordem 21" quando é de ordem 20... Não estou a perceber de onde vem aquele 1 a mais...
 
Não reparei... Já equipei 1º if dentro de else com as chavetas e já corre bem. Tava a adicionar o k++ que parvoice.

Obrigado pela optima ajuda Baderous :D

Esperemos que o programa não apresente mais erros pois pelo que parece já está concluido ;)

Veremos...

Obrigado mais uma vez :x2:
 
hehe olha o programa da FCUL! Já 2 pessoas me pediram ajuda nisso :D

Se tiveres mais problemas diz que eu ja sei esse codigo de trás para a frente
 
Neps, eu sou de Física do IST, nós cá temos programação a sério ;) Para não pensares que isto é flame, a meio do semestre de C eu já estava a dar vectores dinâmicos e estruturas, e isto sempre aplicado a problemas da física. É o chamado crescer à força :D Por comparação, os meus amigos na FCUL dizem-me que nem sabem o que é um vector.
 
Back
Topo