Diagnosing error in command line input

D

Dave Thacker

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
 
M

Matthew Harris

Dave said:
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
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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,768
Messages
2,569,575
Members
45,053
Latest member
billing-software

Latest Threads

Top