User Input
From Rosetta Code
Programming Task
This is a programming task. It lays out a problem which Rosetta Code users are encouraged to solve, using languages they know.
[edit] Text Terminal
[edit] Ada
Works with: GCC version 4.1.2
function Get_String return String is Line : String (1 .. 1_000); Last : Natural; begin Get_Line (Line, Last); return Line (1 .. Last); end Get_String; function Get_Integer return Integer is S : constant String := Get_String; begin return Integer'Value (S); -- may raise exception Constraint_Error if value entered is not a well-formed integer end Get_Integer;
The functions above may be called as shown below
My_String : String := Get_String; My_Integer : Integer := Get_Integer;
[edit] ALGOL 68
print("Enter a string: ");
STRING s := read string;
print("Enter a number: ");
INT i := read int;
~
[edit] BASIC
Works with: QuickBasic version 4.5
INPUT "Enter a string: ", s$ INPUT "Enter a number: ", i%
Works with: FreeBASIC
dim s as string dim i as integer input "Enter a string: ", s input "Enter the integer 75000: ", i
[edit] Befunge
This prompts for a string and pushes it to the stack a character at a time (~) until end of input (-1).
<>:v:"Enter a string: "
^,_ >~:1+v
^ _@
Numeric input is easier, using the & command.
<>:v:"Enter a number: " ^,_ & @
[edit] C
Works with: gcc
#include <stdio.h>
int main(int argc, char* argv[])
{
int input;
if((scanf("%d", &input))==1)
{
printf("Read in %d\n", input);
return 1;
}
return 0;
}
[edit] C++
Works with: g++
#include <iostream>
#include <istream>
#include <ostream>
#include <string>
using namespace std;
int main()
{
// while probably all current implementations have int wide enough for 75000, the C++ standard
// only guarantees this for long int.
long int integer_input;
string string_input;
cout << "Enter an integer: ";
cin >> integer_input;
cout << "Enter a string: ";
cin >> string_input;
return 0;
}
Note: The program as written above only reads the string up to the first whitespace character. To get a complete line into the string, replace
cin >> string_input;
with
readline(cin, string_input);
[edit] C#
using System;
namespace C_Sharp_Console {
class example {
static void Main() {
string word;
int num;
Console.Write("Enter an integer: ");
num = Console.Read();
Console.Write("Enter a String: ");
word = Console.ReadLine();
}
}
}
[edit] Erlang
{ok, [String]} = io:fread("Enter a string: ","~s").
{ok, [Number]} = io:fread("Enter a number: ","~d").
Alternatively, you could use io:get_line to get a string:
String = io:get_line("Enter a string: ").
[edit] Forth
[edit] Input a string
: INPUT$ ( n -- addr n ) PAD SWAP ACCEPT PAD SWAP ;
[edit] Input a number
The only ANS standard number interpretation word is >NUMBER ( ud str len -- ud str len ), which is meant to be the base factor for more convenient (but non-standard) parsing words.
: INPUT# ( -- u true | false ) 0. 16 INPUT$ DUP >R >NUMBER NIP NIP R> <> DUP 0= IF NIP THEN ;
Works with: GNU Forth
: INPUT# ( -- n true | d 1 | false ) 16 INPUT$ SNUMBER? ;
Works with: Win32Forth
: INPUT# ( -- n true | false ) 16 INPUT$ NUMBER? NIP DUP 0= IF NIP THEN ;
Note that NUMBER? always leaves a double result on the stack. INPUT# returns a single precision number. If you desire a double precision result, remove the NIP.
Here is an example that puts it all together:
: TEST ." Enter your name: " 80 INPUT$ CR ." Hello there, " TYPE CR ." Enter a number: " INPUT# CR IF ." Your number is " . ELSE ." That's not a number!" THEN CR ;
[edit] Groovy
word = System.in.readLine() num = System.in.readLine().toInteger()
[edit] Haskell
main = do
putStr "Enter a string: "
str <- getLine
putStr "Enter an integer: "
num <- readLn :: IO Int
putStrLn $ str ++ (show num)
Note: :: IO Int is only there to disambiguate what type we wanted from read. If num were used in a numerical context, its type would have been inferred by the interpreter/compiler.
[edit] Java
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class GetInput {
public static void main(String[] args) throws Exception {
BufferedReader sysin = new BufferedReader(new InputStreamReader(System.in));
int number = Integer.parseInt(sysin.readLine());
String string = sysin.readLine();
}
}
or
Works with: Java version 1.5/5.0+
import java.util.Scanner; Scanner stdin = new Scanner(System.in); String string = stdin.nextLine(); int number = stdin.nextInt();
[edit] Logo
Logo literals may be read from a line of input from stdin as either a list or a single word.
make "input readlist ; in: string 75000 show map "number? :input ; [false true] make "input readword ; in: 75000 show :input + 123 ; 75123 make "input readword ; in: string 75000 show :input ; string 75000
[edit] mIRC Scripting Language
alias askmesomething {
echo -a You answered: $input(What's your name?, e)
}
[edit] newLISP
Works with: newLISP version 9.0
(print "Enter an integer: ") (set 'x (read-line)) (print "Enter a string: ") (set 'y (read-line))
[edit] OCaml
print_string "Enter a string: "; let str = read_line () in print_string "Enter an integer: "; let num = read_int () in Printf.printf "%s%d\n" str num
[edit] Pascal
program UserInput(input, output);
var i : Integer;
s : String;
begin
write('Enter an integer: ');
readln(i);
write('Enter a string: ');
readln(s)
end.
[edit] Perl
Works with: Perl version 5.8.8
#!/usr/bin/perl my $string = <>; # equivalent to readline(*STDIN) my $integer = <>;
[edit] PHP
Works with: CLI SAPI
#!/usr/bin/php <?php $string = fgets(STDIN); $integer = (int) fgets(STDIN);
[edit] Pop11
;;; Setup item reader lvars itemrep = incharitem(charin); lvars s, c, j = 0; ;;; read chars up to a newline and put them on the stack while (charin() ->> c) /= `\n` do j + 1 -> j ; c endwhile; ;;; build the string consstring(j) -> s; ;;; read the integer lvars i = itemrep();
[edit] PostScript
Works with: PostScript version level-2
%open stdin for reading (and name the channel "kbd"): /kbd (%stdin) (r) file def %make ten-char buffer to read string into: /buf (..........) def %read string into buffer: kbd buf readline
At this point there will be two items on the stack: a boolean which is "true" if the read was successful and the string that was read from the kbd (input terminates on a <return>). If the length of the string exceeds the buffer length, an error condition occurs (rangecheck). For the second part, the above could be followed by this:
%if the read was successful, convert the string to integer:
{cvi} if
which will read the conversion operator 'cvi' (convert to integer) and the boolean and execute the former if the latter is true.
[edit] PowerShell
$string = Read-Host "Input a string" $number = Read-Host "Input a number"
[edit] Python
[edit] Input a string
string = raw_input("Input a string: ")
In Python 3.0, raw_input will be renamed to input(). The Python 3.0 equivalent would be
string = input("Input a string: ")
[edit] Input a number
While input() gets a string in Python 3.0, in 2.x it is the equivalent of eval(raw_input(...)). Because this runs arbitrary code, and just isn't nice, it is being removed in Python 3.0. raw_input() is being changed to input() because there will be no other kind of input function in Python 3.0.
number = input("Input a number: ") # Deprecated, please don't use.
Python 3.0 equivalent:
number = eval(input("Input a number: ")) # Evil, please don't use.
The preferred way of getting numbers from the user is to take the input as a string, and pass it to any one of the numeric types to create an instance of the appropriate number.
number = float(raw_input("Input a number: "))
Python 3.0 equivalent:
number = float(input("Input a number: "))
float may be replaced by any numeric type, such as int, complex, or decimal.Decimal. Each one varies in expected input.
[edit] Raven
'Input a string: ' print expect as str 'Input an integer: ' print expect 0 prefer as num
[edit] Ruby
Works with: Ruby version 1.8.4
print "Enter a string: " s = gets print "Enter an integer: " i = gets.to_i # If string entered, will return zero puts "String = " + s puts "Integer = " + i.to_s
[edit] Scheme
The read procedure is R5RS standard, inputs a scheme representation so, in order to read a string, one must enter "hello world"
(define str (read)) (define num (read)) (display "String = ") (display str) (display "Integer = ") (display num)
[edit] Tcl
Like LISP, there is no concept of a "number" in TCL - the only real variable type is a string (whether a string might represent a number is a matter of interpretation of the string in a mathematical expression at some later time). Thus the input is the same for both tasks:
set str [gets stdin] set num [gets stdin]
possibly followed by something like
if {![string is integer $num]} then { ...do something here...}
[edit] Toka
needs readline ." Enter a string: " readline is-data the-string ." Enter a number: " readline >number [ ." Not a number!" drop 0 ] ifFalse is-data the-number
the-string type cr the-number . cr
[edit] UNIX Shell
Works with: Debian Almquish SHell
#!/bin/sh read STRING read INTEGER
Works with: Bourne Again SHell
#!/bin/bash read STRING read INTEGER
[edit] Vedit macro language
Get_Input(1, "Enter a string: ")
#2 = Get_Num("Enter a number: ")
[edit] GUI
[edit] AppleScript
set input to text returned of (display dialog "Enter text:" default answer "")
set input to text returned of (display dialog "Enter a number:" default answer "") as integer
[edit] Java
Library: Swing
import javax.swing.*;
public class GetInputSwing {
public static void main(String[] args) throws Exception {
int number = Integer.parseInt(JOptionPane.showInputDialog ("Enter an Integer"));
String string = JOptionPane.showInputDialog ("Enter a String");
}
}
[edit] Python
Works with: Python version 2.5
Library: Tkinter
import tkSimpleDialog
number = tkSimpleDialog.askinteger("Integer", "Enter a Number")
string = tkSimpleDialog.askstring("String", "Enter a String")
[edit] Tcl
Library: Tk
# create entry widget: pack [entry .e1] # read its content: set input [.e get]
Alternatively, the content of the widget can be tied to a variable:
pack [entry .e1 -textvar input] # show the content at any time by puts $input
The -validate option can be used to test the contents/edits of the widget at any time against any parameters (including testing string is integer when the user hits <Return> or such)
[edit] VBScript
Works with: Windows Script Host
strUserIn = InputBox("Enter Data")
Wscript.Echo strUserIn
[edit] Vedit macro language
Displays a dialog box with two input fields and default OK button. The values entered are stored in text registers 1 and 2. The value from 2nd field is then converted into numeric value. (Accepts integers or integer expressions.)
Dialog_Input_1(1, "`User Input example`,
`??Enter a string `,
`??Enter a number `")
#2 = Num_Eval_Reg(2)
Categories: Programming Tasks | Text processing | Basic language learning | Ada | ALGOL 68 | BASIC | Befunge | C | C++ | C sharp | Erlang | Forth | Groovy | Haskell | Java | Logo | MIRC Scripting Language | NewLISP | OCaml | Pascal | Perl | PHP | Pop11 | PostScript | PowerShell | Python | Raven | Ruby | Scheme | Tcl | Toka | UNIX Shell | Vedit macro language | AppleScript | Swing | Tkinter | Tk | VBScript

