# Diagnosing error in command line input

**URL:** <https://www.ruby-forum.com/t/diagnosing-error-in-command-line-input/123965>\
**Category:** Ruby\
**Created:** [December 22, 2007, 8:13pm UTC](https://www.ruby-forum.com/t/diagnosing-error-in-command-line-input/123965 "2007-12-22T20:13:52Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![dirtytree](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/aeb1de/32.png) [@dirtytree](https://www.ruby-forum.com/u/dirtytree)\
**Post date:** [December 22, 2007, 8:13pm UTC](https://www.ruby-forum.com/t/diagnosing-error-in-command-line-input/123965/1 "2007-12-22T20:13:52Z")

</div>

I’m working on a program (my first) that will need to read user input (a  
file  
name) from the command line. While looking for examples of reading  
command  
line input, I stumbled across this example(1) which I’ve cut and pasted,  
to  
see how it works.  
#!/usr/bin/ruby  
require ‘readline’

def prompt(prompt="\> ")  
input = nil  
prompt += " " unless prompt =~ /\s$/  
loop do  
input = Readline.readline(prompt, true)  
break if input.length \> 0  
end  
return input  
end

apples = prompt(“how many apples do you have?”)  
pears = prompt(“how many pears do you have?”)  
nonsense = prompt(“try my input history (up/down arrow)”)

printf “there are %d items in our input history\n”,  
Readline::HISTORY

When I run this I get:  
dthacker@buckbeak:~/learning/ruby$ ./test-cl-io.rb  
how many apples do you have? 3  
how many pears do you have? 7  
try my input history (up/down arrow) 5  
./test-cl-io.rb:18:in `printf’: can’t convert Object into Integer  
(TypeError)  
from ./test-cl-io.rb:18

I’m guessing that HISTORY is not the method I want to call. Is that my  
problem? Or is there a simple newbie syntax error I’m making?  
TIA  
Dave

(1)[http://beaver.net/slides/ruby/10-easy-pieces.html](http://beaver.net/slides/ruby/10-easy-pieces.html)

---

<div class="post-metadata">

**Author:** ![dirtytree](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/aeb1de/32.png) [@dirtytree](https://www.ruby-forum.com/u/dirtytree)\
**Post date:** [December 22, 2007, 8:34pm UTC](https://www.ruby-forum.com/t/diagnosing-error-in-command-line-input/123965/2 "2007-12-22T20:34:20Z")

</div>

Dave T. wrote:

> loop do  
> printf “there are %d items in our input history\n”,  
> I’m guessing that HISTORY is not the method I want to call. Is that my  
> problem? Or is there a simple newbie syntax error I’m making?  
> TIA  
> Dave
> 
> (1)[http://beaver.net/slides/ruby/10-easy-pieces.html](http://beaver.net/slides/ruby/10-easy-pieces.html)

The object pointed to by Readline::HISTORY is not an object that can be  
converted to an Integer. Your printf attempts to convert it to an  
integer because it has %d. The Readline::HISTORY object is closer to an  
array.

Try the following:

printf “there are %d items in our input history\n”,  
Readline::HISTORY.size
