Jump to content
Luís Paiva

[Resolvido] Dúvida em ciclo while e scanf

Recommended Posts

Luís Paiva

Tenho o seguinte código:

void maior(){
    int x,y;

    x=0; y=1;
    printf ("Números: \n");
    while (y!=0) {
        scanf("%d",&y);
        if (x<y) x=y;
    }
    printf("Maior número é %d \n",x);
}

O programa funciona perfeitamente, mas eu não consigo entender o porquê.Nomeadamente, no ciclo while, o valor de y não será sempre 1? e o %d será apenas o primeiro número introduzido ou será os números todos? Por exemplo, se os números introduzidos forem 4 1 5 0, o %d na primeira volta do ciclo, será 4, ou será 4 1 5 0?

Edited by pwseo
Título, tags de código, formatação.

Share this post


Link to post
Share on other sites
pwseo
22 horas atrás, Luís Paiva disse:

(...) no ciclo while, o valor de y não será sempre 1?

Não, em cada iteração do ciclo, y irá conter o valor introduzido pelo utilizador. Ou seja, se alguém introduzir 4 1 5 0 o ciclo será executado 4 vezes (uma para cada número introduzido), e em cada uma delas y irá assumir um dos valores introduzidos.

22 horas atrás, Luís Paiva disse:

(...) e o %d será apenas o primeiro número introduzido ou será os números todos?

%d não é nada, é apenas um marcador para a função scanf() saber que pretendes ler um valor e armazená-lo numa determinada variável, neste caso, y. Para isso, indicas à scanf o endereço de y, através da expressão &y. Continuando com a ideia que referi no parágrafo anterior, o valor armazenado em y varia com cada iteração, dependendo do que o utilizador introduziu.

22 horas atrás, Luís Paiva disse:

(...) o %d na primeira volta do ciclo, será 4, ou será 4 1 5 0?

Será correspondente ao valor de y, neste caso, 4.

Se estruturares a tua função de uma forma mais legível, percebes melhor o raciocínio:

void maior(void)
{
    int maximo = -1;
    int actual = -1;

    // O ciclo é executado se 'actual' não for zero
    while (actual != 0) {
        // Ler *um* valor e armazenar dentro da variavel 'actual'
        scanf("%d", &actual);
        
        // Comparar 'actual' com 'maximo'
        if (actual > maximo) {
            maximo = actual;
        }
    }

    // Imprimir o valor de 'maximo'
    printf("O maior valor é %d\n", maximo);
}

 

 

Share this post


Link to post
Share on other sites
Luís Paiva

@pwseo Muito obrigado, talvez esteja a precipitar-me ao fazer estas perguntas porque ao analisar o programa sozinho e a fazer outros consegui chegar a essa conclusão. 

Share this post


Link to post
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

×
×
  • 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.