命令行中,可能要求有不同格式的输入,总结了多种情况,用c++,java,分别实现。
C++键盘输入
单个输入
单个int的输入 |
结束:(回车)换行 |
特殊情况 |
[a1,空格,tab,a2],a1被保存到a中,a2输入无效。Eg. [123 \t456] |
[空格,tab,a1],a1被保存到a中。Eg. [ \t123] |
[空格,tab,a1,’a’],a1被保存到a中,’a’输入无效。Eg. [ \t123a] |
[空格,tab,’a’],’a’不会被保存到a中,a中的值为FFFF FFFF CCCC CCCC(-85899346),即未初始化。Eg. [ \ta] |
总上所述,c++的cin>>a会自动忽略空格和tab |
1 2 3 4 5
| #include<iostream> using namespace std; int a; cin >> a;
|
单个char的输入 |
结束:(回车)换行 |
特殊情况 |
[abcd],只有’a’被保存到c中,后面的输入无效 |
[空格,tab,’a’],’a’被保存到c中 |
单个string的输入,一行,忽略空格,tab |
结束:(回车)换行 |
特殊情况 |
[空格,tab,字符串1,空格,字符串2],字符串1被保存到s中,字符串2无效 |
单个string的输入,一行,保存空格,tab |
结束:(回车)换行。 |
1 2
| string line; getline(cin, line);
|
多个输入
多个输入,多行,固定输入个数 |
结束:固定输入个数输入后,(回车)换行结束 |
分隔符:空格,tab,(回车)换行 |
1 2 3
| int arr[10] = { 0 }; for (int i = 0; i < 10; ++i) cin >> arr[i];
|
多个输入,多行,固定输入个数 |
结束:固定输入个数输入后,(回车)换行结束 |
分隔符:空格,tab,(回车)换行 |
1 2 3 4
| int n = 10; int* arrPoint = new int[n]; for(int i=0; i<n; ++i) cin >> arrPoint[i];
|
多个输入,多行,不固定输入个数 |
结束:ctrl+z结束输入 |
分隔符:空格,tab,(换行)回车 |
1 2 3 4
| vector<int> vec; int temp; while (cin >> temp) vec.push_back(temp);
|
多个输入,一行,不固定输入个数 |
结束:(回车)换行 |
分隔符:空格,tab |
1 2 3 4 5 6 7
| vector<int> vec; string line; getline(cin, line); istringstream iss(line); int temp; while (iss >> temp) vec.push_back(temp);
|
Java键盘输入
Stystem.out.read()
System.out.read()实现了从键盘获取输入的字符,但只能获取一个字符,同时,获取进来的变量的类型只能是char,当我们输入一个数字,希望得到的也是一个整型变量的时候,我们还得修改其中的变量类型。(输入1,实际是输入的’1’)
单个char的输入 |
结束:(回车)换行。 |
特殊情况: |
[abcd],只有’a’被保存到c中,后面的输入无效。 |
[tab,’a’],tab会被保存到c中,输出9,因为tab的ascii是9 |
1 2 3 4
| import java.io.IOException; char c = (char)System.in.read(); System.out.println(c);
|
BufferedReader
一行string,包括空格,tab |
(换行)回车结束 |
在一行中输入一个字符串,类似c++的getline(cin,str) |
1 2 3 4 5 6
| import java.io.BufferedReader; import java.io.InputStreamReader; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); System.out.println(str);
|
Scanner
单个输入
1 2 3 4 5
| import java.util.Scanner; Scanner sc = new Scanner(System.in); int i = sc.nextInt(); System.out.println(i);
|
单个char的输入,忽略空格,换行 |
结束:(回车)换行 |
1 2 3
| Scanner sc = new Scanner(System.in); String s = sc.next(); char c = s.charAt(0);
|
单个string的输入,忽略空格,tab |
结束:(回车)换行。 |
1 2
| Scanner sc = new Scanner(System.in); String s = sc.next();
|
一行string的输入,保存空格,tab |
结束:(回车)换行 |
1 2
| Scanner sc = new Scanner(System.in); String sLine = sc.nextLine();
|
多个输入
多个输入,一行or多行,固定输入个数 |
结束:固定输入个数输入后,(回车)换行结束 |
分隔符:空格,tab,(回车)换行 |
1 2 3 4 5 6 7
| int[] arr = new int[5]; for(int i=0; i<5; ++i){ arr[i] = sc.nextInt(); } for(int i=0; i<5; ++i){ System.out.println(arr[i]); }
|
多个输入,一行or多行,不固定输入个数 |
结束:ctrl+z结束输入 |
分隔符:空格,tab,(换行)回车 |
1 2 3 4 5 6 7 8 9
| import java.util.ArrayList; ArrayList<Integer> arrl = new ArrayList<Integer>(); while(sc.hasNext()){ arrl.add(sc.nextInt()); } for(int i=0; i<arrl.size(); ++i){ System.out.println(arrl.get(i)); }
|
多个输入,一行,不固定输入个数 |
结束:(回车)换行 |
分隔符:任意空格,tab |
1 2 3 4 5
| String sLine = sc.nextLine(); String[] arr=sLine.split("\\s+"); for(int i=0; i<arr.length; ++i){ System.out.println(arr[i]); }
|