C++输入输出基础知识:
-
C++语言未定义任何输入输出语句,而是使用标准库(standard library)来提供IO机制。
-
#include<iostream> cin >> cout <<
-
标准输入输出对象
- cin 标准输入(istream)
- cout 标准输出(ostream对象)
- cerr 输出警告和错误信息
- clog 输出程序运行时的一般性信息
-
C++输入的每个字符串 由 空白(空格符 /换行符/制表符间)隔开,文件结束标识符为crtl+Z(windows),control+D(linux)
https://blog.csdn.net/Eddie_burning/article/details/51493523 -
两种常用的输入模式:
-
cin>> 语句读取用户输入的数据时,它会在遇到换行符时停止。换行字符未被读取,而是仍保留在键盘缓冲区中。从键盘读取数据的输入语句只在键盘缓冲区为空时等待用户输入值,但现在不为空。
-
cin 遇空格或换行,会停止识别,如果你打算输入的字符串中带1个或多个空格,则采用getline把停止识别的符号设置为‘\n’(即换行符),就能正确输入输出了。
-
cin.get 函数执行时,它开始从先前输入操作停止的键盘缓冲区读取,并发现了换行符,所以它无须等待用户输入另一个值。
-
读取string对象时,string对象会自动忽略开头处的空白(即空格符、换行符、制表符等),并从第一个真正的字符开始读起,直到遇见下一处空白为止,认为为一个字符串。
ACM模式输入输出参考程序
#include<iostream>
#include<sstream>
#include<string>
#include<vector>
#include<algorithm>
#include<limits.h> //INT_MIN 和 INT_MAX的头文件
using namespace std;
struct stu {
string name;
int num;
};
// 1. 直接输入一个数
int main() {
int n = 0;
while (cin >> n) {
cout << n << endl;
}
return -1;
}
// 2. 直接输入一个字符串
int main() {
string str;
while (cin >> str) {
cout << str << endl;
}
return -1;
}
// 3. 只读取一个字符
int main() {
char ch;
//方式1
while (cin >> ch) {
cout << ch << endl;
}
//方式2: cin.get(ch) 或者 ch = cin.get() 或者 cin.get()
while (cin.get(ch)) {
cout << ch << endl;
}
//方式3 :ch = getchar()
while (getchar()) {
cout << ch << endl;
}
return -1;
}
// 3.1给定一个数,表示有多少组数(可能是数字和字符串的组合),然后读取
int main() {
int n = 0;
while (cin >> n) { //每次读取1 + n 个数,即一个样例有n+1个数
vector<int> nums(n);
for (int i = 0; i < n; i++) {
cin >> nums[i];
}
//处理这组数/字符串
for (int i = 0; i < n; i++) {
cout << nums[i] << endl;
}
}
return -1;
}
//3.2 首先给一个数字,表示需读取n个字符,然后顺序读取n个字符
int main() {
int n = 0;
while (cin >> n) { //输入数量
vector<string> strs;
for (int i = 0; i < n; i++) {
string temp;
cin >> temp;
strs.push_back(temp);
}
//处理这组字符串
sort(strs.begin(), strs.end());
for (auto& str : strs) {
cout << str << ' ';
}
}
return 0;
}
//4.未给定数据个数,但是每一行代表一组数据,每个数据之间用空格隔开
//4.1使用getchar() 或者 cin.get() 读取判断是否是换行符,若是的话,则表示该组数(样例)结束了,需进行处理
int main() {
int ele;
while (cin >> ele) {
int sum = ele;
// getchar() //读取单个字符
/*while (cin.get() != '\n') {*/ //判断换行符号
while (getchar() != '\n') { //如果不是换行符号的话,读到的是数字后面的空格或者table
int num;
cin >> num;
sum += num;
}
cout << sum << endl;
}
return 0;
}
//4.2 给定一行字符串,每个字符串用空格间隔,一个样例为一行
int main() {
string str;
vector<string> strs;
while (cin >> str) {
strs.push_back(str);
if (getchar() == '\n') { //控制测试样例
sort(strs.begin(), strs.end());
for (auto& str : strs) {
cout << str << " ";
}
cout << endl;
strs.clear();
}
}
return 0;
}
//4.3 使用getline 读取一整行数字到字符串input中,然后使用字符串流stringstream,读取单个数字或者字符。
int main() {
string input;
while (getline(cin, input)) { //读取一行
stringstream data(input); //使用字符串流
int num = 0, sum = 0;
while (data >> num) {
sum += num;
}
cout << sum << endl;
}
return 0;
}
//4.4 使用getline 读取一整行字符串到字符串input中,然后使用字符串流stringstream,读取单个数字或者字符。
int main() {
string words;
while (getline(cin, words)) {
stringstream data(words);
vector<string> strs;
string str;
while (data >> str) {
strs.push_back(str);
}
sort(strs.begin(), strs.end());
for (auto& str : strs) {
cout << str << " ";
}
}
}
//4.5 使用getline 读取一整行字符串到字符串input中,然后使用字符串流stringstream,读取单个数字或者字符。每个字符中间用','间隔
int main() {
string line;
//while (cin >> line) { //因为加了“,”所以可以看出一个字符串读取
while(getline(cin, line)){
vector<string> strs;
stringstream ss(line);
string str;
while (getline(ss, str, ',')) {
strs.push_back(str);
}
//
sort(strs.begin(), strs.end());
for (auto& str : strs) {
cout << str << " ";
}
cout << endl;
}
return 0;
}
int main() {
string str;
//C语言读取字符、数字
int a;
char c;
string s;
scanf_s("%d", &a);
scanf("%c", &c);
scanf("%s", &s);
printf("%d", a);
//读取字符
char ch;
cin >> ch;
ch = getchar();
while (cin.get(ch)) { //获得单个字符
;
}
//读取字符串
cin >> str; //遇到空白停止
getline(cin, str); //读入一行字符串
}