Jump to content

erro mingw


polska
 Share

Recommended Posts

Boas pessoal, eu compilei um programa no MingW e a solução deu incorrecta, achei estranho e fui verificar no microsoft visual studio, e aí já deu corretamente... Alguem me conssegue ajudar?

Código:

#include <stdio.h>
int main(){
char cordenadas[6];
int r1[30],r2[30],ultimo=0;
fgets(cordenadas,sizeof(cordenadas),stdin);
do{
 scanf("%d",&r1[ultimo]);
 if(r1[ultimo]!=0)
  ultimo++;
}while(r1[ultimo]!=0);
getchar(); // depois do 0 temos de apanhar o enter senão não lê o fgets asseguir
fgets(cordenadas,sizeof(cordenadas),stdin);
for(int i=0;i<=ultimo;i++){ // <=ultimo porque tem de contar o 0
 scanf("%d",&r2[i]);
}
for(int i=0;i<ultimo;i++){
 if(r1[i]==5 && r2[i]==5){
  printf("KO\n");
  return 0;
 }
}
printf("OK\n");
return 0;
}

Exemplo teste:

-7 0

6

6

6

6

6

6

6

5

5

0

7 0

4

4

4

4

4

4

4

5

5

0

OUTPUT: KO

Quando corro o programa normalmente no mingw com o ficheiro de teste D1.txt exibe-me OK, e deve ser o contrário, eu corri o programa linha a linha, e quando introduzo:

-7 0

6

6

6

6

A execução para e mostra logo OK, nem deixa acabar de meter os dados... Já no visual corre tudo direito e o resultado esta correto...

Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.

Link to comment
Share on other sites

altera os scanf para algo do género

scanf("%d[^\n]\n",...);

Não funciona na mesma, e continua a não me deixar introduzir todos os dados...

Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.

Link to comment
Share on other sites

seria estranho mas tenta isto:

scanf("%d",&(r1[ultimo])); // seria estranho porque o operador [] tem precedência em relação ao &

caso continuar a dar problemas, enfia printf's de debug (com info diferente em cada um) antes dos scanf's

Exactamente igual.. Não é suposto este tipo de erros aparecer... Já fiz programas parecidos e nunca aconteceu, é muito estranho 😄

Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.

Link to comment
Share on other sites

O programa só faz alguma coisa por acaso; o array 'r1' não é inicializado, logo pode ter qualquer valor, incluíndo zero.

No primeiro ciclo lês o valor inteiro do stdin, comparas com zero (o que está mal pois o que devias fazer era verificar se o scanf() retorna 1 valor processado) e se não fôr zero assumes que recebeste um valor e incrementas a variável índice 'i'. A ideia seria de o ciclo terminar se não houvesse um valor recebido. O problema é que o ciclo é um do..while, que vai testar a condição depois de incrementares a variável 'i', logo se o elemento seguinte do array fôr zero (que ainda não foi lido) o ciclo pára.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.