Ir ao conteúdo

Posts recomendados

Postado

Mais tarde eu te mostro se precisar. 

Estou chegando na cidade e estou a toa mas só vou ter algum computador mais tarde 

 

Entendeu que são dois loops um dentro do outro? E o segundo tem um if dentro para ver se a sequência Está aumentando. Só isso

Postado

Olá

 

Espero que tenha progredido com o programa

 

Vou te mostrar um exemplo aqui que pode ajudar a entender o comportamento de scanf(). Essa função, como o nome diz, tem essa característica de "scan" e é um inferno muitas vezes porque é usada com um propósito diferente, E ela come caracteres, dá problemas com fim de linha e não retorna e tal

 

Exemplo: Como no seu programa, ler dois números, mas de um modo civilizado E usando scanf().

 

Em muitos casos se lê a linha todinha como string e trata no programa, mas mudar a técnica não é exatamente uma solução então vou te mostrar uma possibilidade mantendo scanf().

 

O que se pode fazer é ler o primeiro número, um caracter, o segundo número e outro caracter. Assim scanf() consome o que tiver no caminho e você pode testar o que tinha lá.

 

Por simplicidade vamos chamar os dois char de meio e fim e ler assim

 

    n = scanf("%lf%c%lf%c", &valor1, &meio, &valor2, &fim);

 

Note que scanf() devolve o número de ítens lidos e esperamos claro ler 4.

 

Teste 1

Entre com os dois valores separados por espaco ou TAB . Tecle ENTER ao terminar

Valores: 1a2.1y
scanf() leu 4 itens
scanf()     valor1 = 1.000000
no meio veio algo com codigo 97 = 'a'
scanf()     valor2 = 2.100000
no final veio algo com codigo 121 = 'y'

scanf() foi escrita com esse propósito, scan, e ela então le o 'a' como separador meio e o y como separador fim e pega os valores certinho

 

Teste 2

Entre com os dois valores separados por espaco ou TAB . Tecle ENTER ao terminar

Valores: 1.23   -2.8
scanf() leu 4 itens
scanf()     valor1 = 1.230000
no meio foi um TAB
scanf()     valor2 = -2.800000
no final foi um fim de linha \n

Esse mais parecido com o seu problema, usei 1.23 depois um TAB e o -2.8 e teclei ENTER. 

scanf() leu o meio como TAB e o final como \n como esperado

 

Teste 3

Entre com os dois valores separados por espaco ou TAB . Tecle ENTER ao terminar

Valores: -1,-2
scanf() leu 4 itens
scanf()     valor1 = -1.000000
no meio veio algo com codigo 44 = ','
scanf()     valor2 = -2.000000
no final foi um fim de linha \n

Esse caso é legal: você pode separar os valores por vírgula e teclar ENTER no fim e lê certinho

 

Espero que tenha ajudado a entender.

 

Eis o programa. Rode em sua maquina e pense nisso. Essa função é legal mas o comportamento dela em geral não é explicado direito: o lado scan de scanf(). Minha opinião claro. 

 

Espero que ajude mais do que o que eu te expliquei ontem :D

 

O Programa

#define _CRT_SECURE_NO_WARNINGS
#include "stdio.h"

int main(int artgc, char** argv)
{
    int            n;
    char        meio, fim;            // os dois delimitadores
    double        valor1, valor2;     // os dois numeros

    printf("Entre com os dois valores separados por espaco ou TAB . Tecle ENTER ao terminar\n");
    printf("\nValores: ");

    n = scanf("%lf%c%lf%c", &valor1, &meio, &valor2, &fim);

    // o que leu?
    printf("scanf() leu %d itens\n", n);

    // o primeiro
    printf("scanf()     valor1 = %lf\n", valor1);

    // o que tinha entre oa dois
    switch (meio)
    {
    case '\t':
        printf("no meio foi um TAB\n");
        break;
    case ' ':
        printf("no meio foi um espaco\n");
        break;
    default:
        printf("no meio veio algo com codigo %d = '%c'\n", meio, meio);
        break;
    }    // switch

    // o segundo
    printf("scanf()     valor2 = %lf\n", valor2);

    // como terminou
    switch (fim)
    {
    case EOF:
        printf("fim de arquivo no final\n");
        break;
    case '\t':
        printf("no final foi um TAB\n");
        break;
    case '\n':
        printf("no final foi um fim de linha \\n \n");
        break;
    case ' ':
        printf("no final foi um espaco\n");
        break;
    default:
        printf("no final veio algo com codigo %d = '%c'\n", fim, fim);
        break;
    }    // switch
}    // main

 

 

  • Obrigado 1
Postado
14 minutos atrás, Eduardo_Braz disse:

@arfneto Muito Obrigado

 

Entendeu o comportamento da função? Alguns autores dizem que ela "consome" a entrada em busca do que está tentando ler e nesse caminho ela pode descartar  coisas como linhas inteiras e espaços em branco. Ou deixa o usuário teclando ENTER a vida inteira e não retorna...

  • Amei 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!