Your tests are reversed. You need to specify a TRUE value to not stop (as it says, stopifnot).
how.many<-function(fruit, number){
string<-paste("How many",fruit,"?",sep=" ")
#cat(string)
#return(scan(string))
fruit_number<-readline(string)
stopifnot(fruit_number<=number)
stopifnot(fruit_number>=0)
return(fruit_number)
}
> how.many("banana", 5)
How many banana ?9
Error: fruit_number <= number is not TRUE
> how.many("banana", 5)
How many banana ?4
[1] "4"