polska Posted June 18, 2012 at 11:13 PM Report Share #463883 Posted June 18, 2012 at 11:13 PM 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 More sharing options...
HappyHippyHippo Posted June 18, 2012 at 11:18 PM Report Share #463884 Posted June 18, 2012 at 11:18 PM altera os scanf para algo do género scanf("%d[^\n]\n",...); IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
polska Posted June 18, 2012 at 11:26 PM Author Report Share #463886 Posted June 18, 2012 at 11:26 PM 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 More sharing options...
HappyHippyHippo Posted June 18, 2012 at 11:31 PM Report Share #463889 Posted June 18, 2012 at 11:31 PM 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 IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
polska Posted June 18, 2012 at 11:36 PM Author Report Share #463890 Posted June 18, 2012 at 11:36 PM 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 More sharing options...
HappyHippyHippo Posted June 18, 2012 at 11:42 PM Report Share #463892 Posted June 18, 2012 at 11:42 PM puzeste os printf's ? o que e deram ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
polska Posted June 18, 2012 at 11:55 PM Author Report Share #463897 Posted June 18, 2012 at 11:55 PM Ainda não, amanhã vou tratar disso, e digo o resultado. 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 More sharing options...
bsccara Posted June 19, 2012 at 07:40 AM Report Share #463914 Posted June 19, 2012 at 07:40 AM 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now