C++&Java 键盘输入

Posted by ZhengYang on 2016-07-15

命令行中,可能要求有不同格式的输入,总结了多种情况,用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中
1
2
char c;
cin >> c;
单个string的输入,一行,忽略空格,tab
结束:(回车)换行
特殊情况
[空格,tab,字符串1,空格,字符串2],字符串1被保存到s中,字符串2无效
1
2
string s;
cin >> s;
单个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

单个输入

单个int的输入
结束:(回车)换行
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]);
}