携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第18天,点击查看活动详情
C++中的输入与输出
C++的输入,可以使用标准C中的scanf函数实现,作用是可以从标准输入中按指定格式将相应的值读取到指定变量中。举个比较典型的例子:
int year, month, day;
scanf("%d/%d/%d", &year, &month, &day);
假设在上面的例子中,我在命令行中通过键盘输入1990/01/01,则year、month、day就会分别被赋值为1990、1、1。这里的典型应用就是在笔试题目中给出很复杂但是格式很统一的输入时,用这种方式读取输入会非常省事。可以看到,在scanf中除了包含字符串常量之外,还包含要赋值的变量的地址,这里和printf要区分开。其实也很容易理解,因为这里相当于是要改变变量的值,属于是“写”操作,所以自然而然应该将指针变量传入scanf函数,这样才能让函数内部的行为改变指针指向的地址空间。而printf是“读”操作,所以只需要使用值传递即可。
在C++标准库中的,可以使用cin函数来读取标准输入。和scanf不太一样,cin是使用和cout相反的运算符来“连接”各个要输出的变量的。举个例子:
int i;
double d;
std::cin >> i >> d;
如上的例子实现了对i和d两种不同类型变量的读取。
其实printf在执行后,并不能直接将字符串显示在命令行中。这是因为C语言为了提供系统性能、减少系统调用的频率,所以在语言级别设置了缓冲区,实现批量的从用户态到内核态的内容拷贝。这种缓冲的思想和我之前文章中提到的略有不同,这种属于积攒到一定量后再处理,典型的是socket的发送与接收缓冲区,以及操作系统的内核缓冲区。这些系统设计的基本思想,在更高层级的服务端开发中,随处可见。