C++
输入
getchar()
读取一个字符,作为返回值返回
char c = getchar();
cin
向一个或多个变量输入值,可以是字符串,可以是数字,遇到空格或回车算一次输入
示例1:测试cin的读取规则
string s;
cin >> s;
cout<<s<<endl;
示例1结果:
cin遇到空格断开,所以s读入的字符串为”abc”
示例2:输入多个没有空格的字符串
string s1, s2;
cin >> s1 >> s2;
cout<<s1<<endl;
cout<<s2<<endl;
示例2结果:
“abc”和”def”分别被赋给s1和s2
示例3:输入多个数字
int a1, a2;
cin >> a1 >> a2;
cout<<a1 + a2<<endl;
示例3结果:
也可以用来输入数字,编译器会自动识别
getline(cin, str)
从输入流中读取一行,遇到回车才算一次输入
示例:
string s;
getline(cin, s);
cout<<s<<endl;
结果:
可以将空格也读入到字符串中
输出
cout
本部分引用(参考)自:https://blog.csdn.net/qq_35481167/article/details/82792103
示例1:输出两个数字,用空格隔开
int a = 123, b = 456;
cout << a << ' ' << b << endl; // 输出a的值,然后输出一个空格,再输出b的值,最后换行
示例1结果:
示例2:按照不同进制输出数字
需要#include
int a = 90;
cout << a << endl; // 直接输出,默认十进制
cout << dec << a << endl; // 按十进制输出
cout << oct << a << endl; // 按八进制输出
cout << hex << a << endl; // 按十六进制输出
示例2结果:
示例3:控制输出位数
用setprecision()来控制有效数字位数,用cout << fixed << setprecision()来控制小数部分位数
需要#include
double i = 3333.1415926;
cout << i << endl; // 直接输出
cout << setprecision(3) << i << endl; // 3位有效数字,若整数部分就大于3位,则采用科学计数法
cout << setprecision(9) << i << endl; // 9位有效数字
cout << fixed << setprecision(3) << i << endl; // 控制小数部分位数为3位,四舍五入
i = 3.14;
cout << fixed << setprecision(5) << i << endl; // 小数部分为5位,不足则补0
示例3结果:
示例4:输出宽度和对齐方式
setw()设置宽度,setiosflags()设置对齐方式
需要#include
int a = 1, b = 123, c = 12345;
cout << "默认显示:" << endl;
cout << setw(8) << a << setw(8) << b << setw(8) << c << endl;
cout << "左对齐:" << endl;
cout << setiosflags(ios::left);
cout << setw(8) << a << setw(8) << b << setw(8) << c << endl;
cout << "右对齐:" << endl;
cout << setiosflags(ios::right);
cout << setw(8) << a << setw(8) << b << setw(8) << c << endl;
示例4结果:
Java
本部分参考了:
https://www.runoob.com/java/java-scanner-class.html
https://blog.csdn.net/lil_ghost_/article/details/126402588
输入
Scanner类
需要import java.util.Scanner;
示例1:用Scanner.next()接收键盘输入的字符串
和C++的cin一样,遇到空格就会断开
Scanner scanner = new Scanner(System.in);
System.out.println("请输入字符串:");
String s = scanner.next(); // 读取字符串,空格结束
System.out.println("输入的字符串是:"+s);
示例1结果:
示例2:用Scanner.nextLine()接收键盘输入的一行字符
字符串里可以有空格,遇到回车才断开
Scanner scanner = new Scanner(System.in);
System.out.println("请输入字符串:");
String s = scanner.nextLine(); // 读取字符串,回车结束
System.out.println("输入的字符串是:"+s);
示例2结果:
示例3:用Scanner.nextInt()接收键盘输入的整数
Scanner scanner = new Scanner(System.in);
System.out.println("请输入整数:");
int a = scanner.nextInt();
System.out.println(a+"的平方是:"+a*a);
示例3结果:
如果类型不匹配则会报错
此外,还有Scanner.nextLong()、Scanner.nextFloat()等,详细API和用法见:
https://www.runoob.com/manual/jdk11api/java.base/java/util/Scanner.html
可能的问题
下面这段程序实现用整数来输入学号,用String类来输入姓名
Scanner scanner = new Scanner(System.in);
int stuID;
String name;
System.out.println("请输入学号:");
stuID = scanner.nextInt(); // 用一个整数来接收学号
System.out.println("请输入姓名:");
name = scanner.nextLine(); // 用一个String类来接收姓名
System.out.println("学号为"+stuID+"的学生姓名为:"+name);
但是输入学号之后,程序就结束了,如下图。这是因为回车符被scanner.nextLine()视为输入结束了,于是name读入了一个空字符串。
解决办法
用一个多余的scanner.nextLine()来消耗掉这个回车。
Scanner scanner = new Scanner(System.in);
int stuID;
String name;
System.out.println("请输入学号:");
stuID = scanner.nextInt(); // 用一个整数来接收学号
scanner.nextLine(); // 吸收上一次的回车
System.out.println("请输入姓名:");
name = scanner.nextLine(); // 用一个String类来接收姓名
System.out.println("学号为"+stuID+"的学生姓名为:"+name);
输出
System.out.printf()
格式化输出,用法和C语言一样
String s = "abcdef";
System.out.printf("字符串%s的长度为:%d",s,s.length());
// 输出:字符串abcdef的长度为6
System.out.print()和System.out.println()
区别在于:
前者输出之后不换行,必须有参数(即输出的内容)
后者输出之后换行,可以没有参数(只输出一个换行)
int a = 123;
String s = "abc";
System.out.print(a);
System.out.print(s);
/*
输出:
123abc
*/
System.out.println(a);
System.out.println(s);
/*
输出:
123
abc
*/
Python
输入
input()
Python只用input()函数从键盘接收输入,可以带参数,参数为输入的提示语
输入是按行输入的,遇到回车算一次输入
如果需要输入数字,需要在程序中自行处理
示例1:从键盘输入一个字符串
s = input()
print(s)
示例1结果:按行读入,遇到空格不会断开
示例2:从键盘读入一个数字
# input函数中可以带有提示语
# input函数读入是字符串,用int()进行类型转换
s = int(input("请输入一个整数:"))
print(s,"的平方是",s**2)
示例2结果:
示例3:从键盘读入多个不含空格的字符串
# 用split分割,不带参数默认按空格分割
s1, s2, s3 = input().split()
print(s1)
print(s2)
print(s3)
示例3结果:
示例4:从键盘读入多个数字
# 用map()对分割形成的字符数组进行处理
a1, a2, a3 = map(int, input().split())
print(a1+a2+a3)
示例4结果:
示例5:从键盘读入多个数字到数组
# 用list()进行类型转换
arr = list(map(int, input().split()))
print(arr)
示例5结果:
输出
print(*objects, sep=’ ‘, end=’\n’, file=sys.stdout, flush=False)
参数:(带*号的为不常用的参数)
objects – 复数,表示可以一次输出多个对象。输出多个对象时,需要用 , 分隔。
sep – 用来间隔多个对象,默认值是一个空格。
end – 用来设定以什么结尾。默认值是换行符 \n,我们可以换成其他字符串。
*file – 要写入的文件对象。
*flush – 输出是否被缓存通常决定于 file,但如果 flush 关键字参数为 True,流会被强制
示例1:输出多个对象
a = 123
s = "abc"
print(s,a)
# 输出:abc 123
示例2:用%控制格式化字符串
a = 123
s = "abc"
print("str is:%s, int is:%d"%(s,a))
# 输出:str is:abc, int is:123
示例3:用f转化格式
s = "abc"
l = len(s)
print(f"length of string '{s}' is {l}")
# 输出:length of string 'abc' is 3
示例4:string.format()格式
print('输出:{:f}'.format(12))
# 输出:12.000000
print('输出:{:.2f}'.format(12))
# 输出:12.00
print('输出:{:+}'.format(12))
# 输出:+12
print('输出:{:%}'.format(0.5))
# 输出:50.000000%
print('输出:{:.2%}'.format(0.5))
# 输出:50.00%
print('输出:{:e}'.format(0.5))
# 输出:5.000000e-01
print('输出:{:b}'.format(5))
# 输出:101