<iostream>
#include iostreamcin 运算符会根据变量类型自动解析但它会跳过空格、制表符和换行符如果你在读取包含空格的字符串不用 cin str; 可以用 getline(cin,str);cout自带缓冲的意味着为了效率系统可能不会立即把输出内容打印到屏幕上而是等缓冲区满了或者是遇到了 endl / flush 时才一次性输出打印cerr没有缓冲区程序崩溃时 cerr 中的内容通常也能立即显示在屏幕上在调试和报告严重故障时可以优先考虑使用clog带缓冲区适合记录大量运行信息因为缓冲性能比 cerr 高但不能保证程序异常退出时能够立刻看见最后几条日志总结普通输出用 cout报错信息用 cerr因为它最快显示不排队打日志用 clog补充在默认情况下cin 和 cout 是绑定 tie 在一起的意味着每次执行 cin 之前程序都会自动刷新 cout 的缓冲区确保在输入前能看到提示语因此ios::sync_with_stdio(false); cin.tie(nullptr);上述这两行代码作用在做算法竞赛或处理大量数据时可以使用以下代码加速第一行取消与 Cstdio 的同步第二行解除 cin 和 cout 的绑定endl 和 \n两者在 C 中都能表示换行但也有区别endl 输出换行并强制刷新缓冲区\n 仅输出换行不触发刷新因此在频繁输出换行时尽量用 \n 这样能够减少刷新时间否则会极大降低程序运行速度getline()cin.getline(char* buffer,streamsize count, char delim); //buffer: 指向字符数组的指针即你要把数据存到哪 //count: 读取的最大字符数包括最后的空字符 \0 //delim (可选): 停止读取的分隔符默认为 \n注意固定长度超过长度会报错/截断如果输入长度 size会触发错误状态位了解即可比如 遇到 \n 流状态如果一切正常的话 cin.good() 为真这样就可以继续读取下一行到达文件末尾 EOF 流状态会设置为 eofbit当在循环里写 while(getline(cin,str))因为流已经认为 没东西可以读取了于是此时循环会终止储存空间耗尽的时候 流状态会设置为 failbit注意如果 failbit 响应的话除非调用 cin.clear()否则在后面的所有的输入操作包括 cin 或者是 另外一个 getline 都会直接跳过不会执行EG#include iostream using namespace std; int main() { char name[20]; cout 请输入你的名字: ; // 最多读取 19 个字符留下 1 个位置给结束符 \0 cin.getline(name, 20); cout 你好, name endl; return 0; }