C++ I/O 请见C++ I/O。
C输入输出标识符
类型 | 输入 | 输出 |
---|---|---|
long | %ld | %ld |
long long | %lld %I64d | %lld %I64d * |
float | %f | %f |
double | %lf | %f |
long double | %llf %Lf | %Lf |
* 在 Codeforces 使用 %lld
输出可能会炸,在 Light OJ 上使用 %I64d
会炸,所以我选择 cout
🙄
为什么要 scanf_s
scanf
在读入字符串的时候中存在安全漏洞,简单的来说就是读字符串时没有指定长度上限,导致可能把字符串(恶意代码)写入其他内存部分。因此使用 Visual Studio 进行工程开发时建议使用 scanf_s
或者 cout
。(貌似 scanf_s
也加入了 C++ 20 的标准中,是微软提议的)。
使用时,scanf_s
在用 %s
输入字符串时,要在 char*
指针后加一个长度 count
参数。其他语法和 scanf
一致。
scanf %c 不忽略空格、回车
scanf("%c")
是看得见空格、回车的。相比下,cin
会看不见空格、回车。
scanf %*d
忽略对应输入
1 | scanf("%d%*d%d", &a, &b, &c); |
输入 1 2 3
,a=1
,2 被跳过,b=3
,c 未被赋值。
printf 格式化输出
1 | printf("%7.3d", 2); //output: " 002" |
puts, gets, putchar, getchar, getc
1 | puts("a"); //with endline |
值得注意的是,gets
因为和 scanf
拥有同样的安全漏洞,在 C++ 11 中被弃用,在 C++ 14 中被移除,现在建议使用 fgets,但输入输出有不同。
fgets
1 | char str[100]; |
fgets
后的 str
包含 \n
,而 gets
后的 str
不包含。处理时需注意。
getch
1 | char a = getch() //没有回显,在conio.h里 |
从文件输入、输出
1 | //从文件输入、输出(1) |