C language - Infinite loop, not doing the comparison of vectors as I planned

Asked

Viewed 82 times

-1

Good afternoon.

I’m doing an exercise, I developed a solution but it’s not working, I’m a few days ago trying to solve but.

Write a program that reads the age and first name of 10 people. Your program should end when a negative age is entered. When finished, your program should write the name and age of younger and older people.

#include <stdio.h>
#include <string.h>
#include <conio.h>

int main()
{
    int i=0;
    int idade[10];
    int troca_idade;
    char nome[10][20];
    char troca_nome[20];

    for (i=0;i<10;i++){
        printf("Digite o %i nome: ",i);
        fgets(nome[i],20,stdin);
        setbuf(stdin,NULL);
        printf("Digite a idade: ");
        scanf("%i",&idade[i]);
        setbuf(stdin,NULL);
        if (idade[i]<0){
            break;
        }
    }

    for(i=0;i<10;i++){
        if (idade[i]<idade[i+1]){ // Se a posição atual for menor que a seguinte não faz nada, se for diferente começa.Lembrando que estou espelhando a posição da idade com os nomes.

        }
        else{
            troca_idade=idade[i];//troca_idade esta com maior valor
            // troca_nome=nome[0];
            strcpy(troca_nome, nome[i]);

            idade[i]=idade[i+1];//idade[i] esta com o valor menor
            //nome[i]=troca_nome[0];
            strcpy(nome[i],nome[i+1]);


            idade[i+1]=troca_idade; //A posição a frente (i+1) esta com o maior vetor
            //nome[i+1]=troca_nome[0];
            strcpy(nome[i+1],troca_nome);

            printf("\n%i",i);
            i=0; //Se for feita uma alteração zera o contador, para refericação de todo o vetor novamente, só sai do loop quando na mudar nada de lugar.
        }
    }

    for (i=0;i<10;i++){
        printf("idade: %i nome: %s ",idade[i],nome[i]);
    }
    return 0;
}

The logic and the following, if the later position is greater than the current one both change value, each time you change the counter Zera, to revert everything, only leaves the Loop when you no longer make any changes !

I believe the problem is in the i counter of FOR, when I have printed only appears the value 2.

I know it’s a simple and banal problem, but I spent a few days trying to solve it. And the solutions I’ve been trying Are endangering the compiler.

  • 1

    Note that the index of your array varies from 0 to 9. You loop for(i=0;i<10;i++){ but then the if if (idade[i]<idade[i+1]){, ie for i = 9 will try to access age[10] that is outside the limit of its array.

1 answer

0

Thank you very much ! I managed to make the code a little more right! From the moment you released the Loop I saw some more errors and fixed. It’s practically working. I’m just having a little problem sometimes when I have to make a lot of changes the first position gets the wrong value, only change position about 2x.

#include <stdio.h>
#include <string.h>
#include <conio.h>

int main()
{
    int i=0;
    int idade[10];
    int troca_idade;
    char nome[10][20];
    char troca_nome[20];

    for (i=0;i<10;i++){
        printf("Digite o %i nome:",i);
        scanf("%s",&nome[i]);
        setbuf(stdin,NULL);
        printf("Digite a idade:");
        scanf("%i",&idade[i]);
        setbuf(stdin,NULL);
        if (idade[i]<0){
            break;
        }
    }

    for(i=0;i<9;i++){
        if (idade[i]<idade[i+1]){ // Se a posição atual for menor que a seguinte não faz nada, se for diferente começa.Lembrando que estou espelhando a posição da idade com os nomes.

        }
        if(idade[i]>idade[i+1])
            {
            troca_idade=idade[i];//troca_idade esta com maior valor
            strcpy(troca_nome, nome[i]);

            idade[i]=idade[i+1];//idade[i] esta com o valor menor
            strcpy(nome[i],nome[i+1]);


            idade[i+1]=troca_idade; //A posição a frente (i+1) esta com o maior vetor
            strcpy(nome[i+1],troca_nome);


            i=0; //Se for feita uma alteração zera o contador, para refericação de todo o vetor novamente, só sai do loop quando na mudar nada de lugar.
        }
    }
    printf("\n");
    for (i=0;i<10;i++){
        printf("idade:%i nome:%s\n",idade[i],nome[i]);
    }
    return 0;
}

I can correct but with gambiarra with another loop or increasing the vector, but I want to understand what happens. For the next time know how to react !

Suggested values for testing in that order: 987,98,688,65,65,699,44,323,33,8.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.