Menu
Coddy logo textTech

Obtendo a Entrada do Usuário

Parte da seção Fundamentos do Journey de R da Coddy — lição 34 de 78.

challenge icon

Desafio

Fácil

Na lição anterior, você criou uma mensagem de boas-vindas para a Calculadora de Divisão de Conta. Agora, adicione a funcionalidade para coletar a entrada do usuário para o cálculo da conta.

Após a sua mensagem de boas-vindas existente, leia três entradas do usuário:

  1. O valor total da conta
  2. A porcentagem da gorjeta (como um número inteiro, por exemplo, 15 para 15%)
  3. O número de pessoas dividindo a conta

Em scripts R que rodam de forma não interativa (como nesta plataforma), a entrada é lida do fluxo de entrada padrão (standard input). Para fazer isso, primeiro abra uma conexão com stdin usando file(), depois leia cada linha com readLines() e feche a conexão quando terminar:

con <- file("stdin", "r")
bill <- as.numeric(suppressWarnings(readLines(con, n = 1)))
tip_percent <- as.numeric(suppressWarnings(readLines(con, n = 1)))
people <- as.numeric(suppressWarnings(readLines(con, n = 1)))
close(con)

Aqui está o que cada parte faz:

  • file("stdin", "r") — abre o fluxo de entrada padrão para leitura e o armazena em con
  • readLines(con, n = 1) — lê exatamente uma linha dessa conexão. Nota: readLines() é diferente de readline()readLines() funciona com conexões de arquivo (incluindo stdin) e pode ler várias linhas de uma vez usando n =, enquanto readline() só funciona interativamente no console do R
  • suppressWarnings(...) — silencia avisos inofensivos que aparecem ao ler de stdin desta forma. Quando o R lê de stdin em um script, ele às vezes produz um aviso como "incomplete final line" mesmo quando tudo funciona corretamente. Envolver a chamada em suppressWarnings() esconde essas mensagens para que não poluam sua saída — isso não afeta os valores que estão sendo lidos
  • as.numeric(...) — converte a entrada de texto em um número
  • close(con) — fecha a conexão após todas as entradas serem lidas

Armazene os três valores em variáveis chamadas bill, tip_percent e people.

Após ler as entradas, exiba uma mensagem de confirmação mostrando o que foi inserido no seguinte formato:

Bill: $[bill]
Tip: [tip_percent]%
People: [people]

Use cat() para toda a saída e inclua caracteres de nova linha \n onde for necessário. Use sep = "" em cada chamada de cat() para evitar espaços indesejados.

Por padrão, o cat() insere um espaço entre cada item que imprime. Por exemplo:

cat("Bill: $", 120, "\n")   # prints: Bill: $ 120 

Observe os espaços indesejados entre $ e 120, e antes da nova linha. Adicionar sep = "" diz ao cat() para usar uma string vazia como separador, para que nada seja inserido entre os itens:

cat("Bill: $", 120, "\n", sep = "")   # prints: Bill: $120

Aplique este padrão a todas as três linhas de confirmação:

cat("Bill: $", bill, "\n", sep = "")
cat("Tip: ", tip_percent, "%\n", sep = "")
cat("People: ", people, "\n", sep = "")

Por exemplo, se as entradas forem 120, 18 e 4, a saída completa deve ser:

Welcome to the Bill Split Calculator!
Let's split your bill fairly.
Bill: $120
Tip: 18%
People: 4

Experimente você mesmo

# TODO: Write your code below
# Use cat() to display the welcome message
# Remember to use \n for new lines
cat("Welcome to the Bill Split Calculator!\nLet's split your bill fairly.\n")

Todas as lições de Fundamentos