In programming, we often need to ask the user to provide some data. Ruby uses the gets method (often in combination with the chomp method) to get input from the user.
Here's a quick example of getting user input in Ruby. You can read the rest of the tutorial to learn more.
Example
# Prompt the user for input print "Enter your name: " # Get user input name = gets.chomp # Print the input puts "Welcome, #{name}!" # Output: # Enter your name: Marilyn # Welcome, Marilyn! Here, we used gets to store the user input in the name variable and eliminated the newline character at the end using chomp. Then, we printed the variable.
Getting User Input Using gets
As you know, we use the gets method to get user input. Let's see what happens when we only use it without the chomp method:
# Prompt the user for input print "Enter your name: " # Get user input without chomp name = gets # Print the input puts "Welcome, #{name}!" Output
Enter your name: Marilyn Welcome, Marilyn !
Compare this program to our previous example. You'll see that the previous program printed Welcome, Marilyn! in the same line.
But this program prints ! in the next line. Why?
Because the gets method takes a newline.
You know that the ENTER / RETURN key inserts a new line in your text.
So, when the user types the input and presses this key, the new line is also added to the end of the input.
Next, we'll use the chomp method to get rid of this new line from the user input.
Note: In Ruby, a new line is represented by the newline character "\n". So, when the user enters "Marilyn", Ruby stores it as "Marilyn\n".
Getting Rid of the Newline Using chomp
The Ruby chomp method gets rid of the newline character from user input. For example,
print "Enter your name: " # Get user input with chomp name = gets.chomp print "Enter your age: " # Get another input without chomp age = gets # Print the inputs puts "Welcome, #{name}!" puts "You are #{age} years old." Output
Enter your name: Marilyn Enter your age: 25 Welcome, Marilyn! You are 25 years old.
Here, we used gets.chomp with the name variable but didn't use it with the age variable:
# Get user input with chomp name = gets.chomp # Get another input without chomp age = gets As a result, age has a newline at the end but name doesn't.
Let's rectify this problem by using chomp for both inputs:
print "Enter your name: " name = gets.chomp print "Enter your age: " age = gets.chomp puts "Welcome, #{name}!" puts "You are #{age} years old." Output
Enter your name: Marilyn Enter your age: 25 Welcome, Marilyn! You are 25 years old.
Ruby Inputs are Strings
In Ruby, the gets method reads input from the user as a string. For example,
puts "Enter two numbers: " num1 = gets.chomp num2 = gets.chomp # Add num1 and num2 sum = num1 + num2 puts "Sum: #{sum}" Output
Enter two numbers: 1 2 Sum: 12
Here, we have two number inputs for num1 and num2. But when we added them, we got 12 instead of 3.
That's because our inputs are the strings "1" and "2". So, "adding" two strings using the + operator results in the two strings being joined together.
This is known as string concatenation:
# Concatenating (joining) two strings puts "1" + "2" # Output: 12 We need to convert our input to number types like integer or float to fix this issue.
Convert Input to Number
We use the to_i and to_f methods to convert the string inputs to integers and floats, respectively.
Example 1: Converting Input to Integer
Let's rewrite the previous program to convert our string inputs to integers:
puts "Enter two numbers: " # Convert inputs to integers num1 = gets.chomp.to_i num2 = gets.chomp.to_i sum = num1 + num2 puts "Sum: #{sum}" Output
Enter two numbers: 1 2 Sum: 3
Here, we used to_i to convert the string inputs to integers before assigning them to the variables:
# Convert inputs to integers num1 = gets.chomp.to_i num2 = gets.chomp.to_i Now, we finally get the correct sum, i.e., 3.
Example 2: Converting Input to Float
print "Enter the price: " price = gets.chomp.to_f print "Enter the discount percentage: " discount = gets.chomp.to_f discount_amount = price * (discount / 100) final_price = price - discount_amount puts "Discounted Price: $#{final_price}" puts "You saved $#{discount_amount}!" Output
Enter the price: 560 Enter the discount percentage: 12 Discounted Price: $492.8 You saved $67.2!
Here, we used to_f to convert the inputs to floats:
price = gets.chomp.to_f discount = gets.chomp.to_f