C buffer

2023-05-16

这学期在Dartmouth上ENGS20(Introduction to Scientific Computing),好多东西不记下来就会忘,所以开一个笔记。

在C语言中,输入和输出都是有buffer的,即使在程序中写了“printf”,也不会马上在屏幕上输出,而是存在buffer这样一个存储区域,只有在两种情况下buffer中的东西才会被显示出来,第一是buffer已经被填满了,第二种就是你故意把它搞出来。第二种又分两个情况,'scanf'和'\n'。而用‘fprintf’向文件中输入,如果buffer满了,也会输出,或者你可以用“fflush”手动输出。

其实,C语言为输入(键盘)和输出(显示器)创造了两种特殊文件,“stdin”和“stdout”,这些文件我们可以把它当做其他已经被打开的文件来使用,以下两个语句是等效的:

fprintf(stdout, "%c", ch);

printf("%c", ch);

需要注意的是,在debug的时候一定要用printf(“\n”); 而不是printf(“”); 因为即使程序出现错误后者无法显示你的debugging信息。


#include<stdio.h>

int main(void){
  int a, b;
  printf("Enter a number:");
  scanf("%d", &a);
  printf("Enter another number: ");
  scanf("%d", &b);
  printf("You have entered %d and %d\n", a, b);
  return (0);
}

/*
sample output:

Enter a number:3
Enter another number: 45
You have entered 3 and 45

Enter a number:3 45
Enter another number: You have entered 3 and 45
*/

在上面的这个程序中,如果连续输入两个数,第二个scanf在input buffer中发现了45,于是程序直接结束。


   char a, b;
   printf("enter a character:");
   scanf("%c", &a);
   printf("enter another character:");
   scanf("%c", &b);
   printf("haha, you got an error!\n");

/*
sample output:
enter a character:r
enter another character:haha, you got an error!
*/

在上面这个例子中,你在第一个字母之后的按下的“enter”键对“scanf” function来说也是有效的输入,所以第二个“scanf”就把enter读到“b”中,这都是和input buffer有关的非常有趣的bug。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C buffer 的相关文章

  • C++ 刷新缓冲区

    我知道这里有很多缓冲区问题 但我似乎找不到明确的答案 std cout lt lt write to screen lt lt std endl 我知道这段代码会因为 endl 而写入屏幕并刷新缓冲区 但如果我这样写 std cout lt
  • 多线程时为什么要关闭标准输出缓冲区?

    我正在尝试学习多线程 我有一个简单的问题 在我发现的大多数示例中 标准输出缓冲区在让多个线程使用它之前会被关闭 setbuf 标准输出 NULL 为什么 如果我删除代码上的那一行 代码打印出来的效果是一样的 它们可能不会打印出相同的内容 当
  • NodeJS将64位无符号整数写入缓冲区

    我想以大端格式将 64 位 8 字节 大整数存储到 nodejs 缓冲区对象中 此任务的问题是 nodejs 缓冲区仅支持写入 32 位整数作为最大值 使用 buf write32UInt32BE value offset 所以我想 为什么
  • Javascript fs.readFileSync 返回什么编码?

    考虑以下 Node js Javascript 程序 var fs require fs var encoding1 var encoding2 var a fs readFileSync testdoc pdf var b new Buf
  • 当在 Node.js 中从 firebird 中选择时,未知值

    我是火鸟的新人 我试图从数据库中获取名称 但它返回
  • 刷新jsp文件时线程锁定

    在重负载下 当 GZipping 和解压缩 JSP 文件时 我看到很多线程被锁定 线程转储如下所示 似乎来自大小为 14Kb 的 header jsp http 0 0 0 0 8080 304 daemon prio 3 tid 0x00
  • UDP 服务器套接字缓冲区溢出

    我正在 Linux 上编写 C 应用程序 我的应用程序有一个 UDP 服务器 它在某些事件上向客户端发送数据 UDP 服务器还接收来自客户端的一些反馈 确认 为了实现这个应用程序 我使用了一个 UDP 套接字 例如int fdSocket
  • 缓冲区的字节大小(Javascript / Node)[重复]

    这个问题在这里已经有答案了 如何在 JavaScript 中获取缓冲图像的大小 以字节为单位 我不允许信任客户端的文件大小 并且需要在后端进行验证作为上传验证的一部分 我的设置如下 1 我在客户端上传一个文件并将其从 React 组件发送到
  • 如何写入 OpenGL 深度缓冲区

    我正在尝试实现一种老式技术 其中使用渲染的背景图像和预设深度信息来遮挡场景中的其他对象 因此 例如 如果您有一张房间的图片 前景中的天花板上悬挂着一些电线 则这些电线会在深度图中给出浅深度值 并且在正确渲染时 允许角色在电线 后面 行走 但
  • 使用 WCF 流上传文件,从流中进行微小读取

    我已经使用WCF的流实现了文件上传 一切都按预期进行 但是我遇到了一个问题 我分配 4kb 缓冲区来从传入流中读取数据 但 WCF 仅读取 255 字节 这是我的上传功能 public UploadResponse UploadFile F
  • C# 中的 StreamReader 和缓冲区

    我对 StreamReader 的缓冲区使用有疑问 这里 http msdn microsoft com en us library system io streamreader aspx http msdn microsoft com e
  • 获取网页时,如何在 Ruby 中捕获“处理过程中的错误:缓冲区错误”?

    我正在使用 Rails 4 2 7 和此代码通过 SOCKS 代理获取网页 begin res1 Net HTTP SOCKSProxy 127 0 0 1 50001 start uri host uri port do http put
  • 如何在 VB NET 中读取控制台缓冲区?

    我见过一个使用 ConsoleRead API 函数的 C 示例 但是当我尝试将其转换为 VBNET 时 出现了很多错误 在其他网站 如 pinvoke 中 独特的示例也是针对 C 的 我找不到任何好的示例ConsoleRead API 函
  • 有什么办法可以查看标准输入缓冲区吗?

    我们知道stdin默认情况下是缓冲输入 证明这一点的证据是使用任何 留下数据 的机制stdin 例如scanf int main char c 10 0 scanf 9s c printf s and left is d n c getch
  • 在 Ubuntu 11.04 中禁用堆栈崩溃保护

    我在 2007 年 MacBook 上运行 32 位 Ubuntu 11 04 并且刚刚开始了解缓冲区溢出漏洞 我正在尝试运行书中的示例程序 但 Ubuntu 的安全措施使我无法成功执行缓冲区溢出 这是我尝试运行的代码 include
  • BufferedWriter在java中如何工作

    我经常将文本输出到文件中 我想知道一件事 怎么办BufferedWriterwork 当我打电话时它会在文件中写入文本吗writer write text 如果不写文本 我需要使用flush函数来写数据吗 例如 File file new
  • 为什么启用自动刷新后使用空打印?

    我在一段代码中发现了类似的东西 use IO Handle autoflush STDOUT 1 print 打印 的目的是清空可能已满的缓冲区吗 The print强制立即输出缓冲区中的所有文本 来自先前的打印 该代码基本上禁用缓冲并刷新
  • 在没有缓冲区的情况下将数据从 fstream 复制到 stringstream?

    无论如何 我可以从fstream 一个文件 到一个stringstream 内存中的流 目前 我正在使用缓冲区 但这需要双倍的内存 因为您需要将数据复制到缓冲区 然后将缓冲区复制到字符串流 直到删除缓冲区为止 数据都会在内存中复制 std
  • 如何在 Webpack 5 中为 jsonwebtoken 填充缓冲区

    我正在升级到 Webpack 5 并且 jsonwebtoken 包存在问题 https github com auth0 node jsonwebtoken https github com auth0 node jsonwebtoken
  • 如何通过pthreads管理两个或多个消费者?

    我有一个正在寻求解决的通用问题 即从标准输入或常规文件流发送到应用程序的二进制数据块 应用程序又将二进制数据转换为文本 使用线程 我想在将文本传输到下一个应用程序之前对其进行处理 该应用程序会进一步修改该文本 依此类推 作为一个简单的测试用

随机推荐

  • FFmpeg3最新的解码接口avcodec_send_packet和avcodec_receive_frame分析

    ffmpeg3版本的解码接口做了不少调整 xff0c 之前的视频解码接口avcodec decode video2和avcodec decode audio4音频解码被设置为deprecated xff0c 对这两个接口做了合并 xff0c
  • ffmpeg3.3新版本AVStream的封装流参数由codec替换codecpar(解码)

    ffmpeg新版本中 xff08 封装流 xff09 AVStream的codec参数要被codecpar参数所替代 xff0c 这样替代我们要注意什么 xff0c 为什么要替代 xff0c 我们先来看下ffmpeg的代码 代码分析和新参数
  • 为什么 qt 成为 c++ 界面编程的第一选择?

    为什么qt成为c 43 43 界面编程的第一选择 一 前言 为什么现在QT越来越成为界面编程的第一选择 xff0c 笔者从事qt界面编程已经有接近8年 xff0c 在这之前我做C 43 43 界面都是基于MFC xff0c 也做过5年左右
  • C++QT5跨平台界面编程原理和实战大全-夏曹俊-专题视频课程

    C 43 43 QT5跨平台界面编程原理和实战大全 4271人已学习 课程介绍 课程讲解基于QT5 9 SDK xff0c 包含QT界面编程的核心内容 xff0c 并提供全部源码 xff0c 课程讲解方式是接口讲解 分析 演示示例 xff0
  • Darknet问题:ERROR: Cannot load message class for [darknet_ros_msgs/BoundingBoxes].

    运行darknet ros进行目标检测时 xff0c 通过 rostopic list查看到 darknet ros bounding boxes这个话题 xff0c 因此想查看该话题的数据 xff0c 在使用 rostopic echo
  • ROS问题:ERROR: cannot launch node of type

    在运行launch文件时 xff0c 出现如下错误提示 xff1a 原因是没有source 所以解决方案就是在编译完成之后添加source devel setup bash xff0c 问题解决 参考网址 xff1a ERROR canno
  • 标注工具labelme的使用

    在做目标检测任务时 xff0c 少不了对图像进行标注 xff0c 标注工具有好几种 xff0c labelme是其中比较好用的一种 labelme可对图像进行标注 xff0c 包括多边形 矩形 线 点和图像级标注 它是用Python编写的
  • Linux小技巧之终端terminal全选

    当打开一个终端 xff0c 经过若干指令后 xff0c 终端上输出的内容较多 xff0c 直接框选这些内容进行选择比较费事 有没有全选的功能呢 xff1f 答案是有的 xff01 方法1 xff1a 终端菜单栏全选 当窗口比较小时 xff0
  • 如何使用set::key_comp 和 set::value_comp 标准模板库 (STL) 函数

    下面的代码示例演示如何使用 Visual C 43 43 set key comp 和 set value comp 的 STL 功能 所需要的头文件 xff1a lt set gt 原型 template lt class K class
  • Linux小技巧之终端快捷键大全

    在前面一篇博客中记录了终端全选的技巧 下面记录一下关于终端使用的其它一些小技巧 F1查看帮助F11全屏Shift 43 Ctrl 43 T 打开一个新的终端Shift 43 Ctrl 43 N新建一个窗口打开终端Shift 43 Ctrl
  • ROS问题:Yolo v4移植到ROS后检测结果/darknet_ros/detection_image在rviz中显示乱码

    在前面一篇博客 xff08 Yolo v4移植ROS xff09 中介绍了将Yolo v4移植到ROS中 由于Yolo v4的源码在Yolo v3源码的基础上有改动 xff0c 移植成功后会出现一个小bug xff0c 如下图所示 xff1
  • 吉洪诺夫正则化(Tikhonov regularization )

    最近看了看吉洪诺夫正则化方法 xff0c 对其基本内容作了一个简单的了解 现在总结如下 1 正则化 定义 xff1a 正则化 regularization xff0c 是指在线性代数理论中 xff0c 不适定问题通常是由一组线性代数方程定义
  • C++中getline()、gets()等函数的用法

    在学习C 43 43 的过程中 xff0c 经常会遇到输入输出的问题 xff0c 以下总结一下下面几个函数的用法 xff1a 1 cin 2 cin get 3 cin getline 4 getline 5 gets 1 cin gt g
  • C++字母大小写转换方法

    字母大小写这个问题相对比较简单 xff0c 总结了一些常用的大小写转换的方法 xff0c 欢迎指正补充 xff01 思路1 xff1a 根据字母的ASCII表进行转换 xff1a 由表格可以看出 xff0c 对应大小写字母之间相差32 xf
  • C++ 标准输出控制小数点后位数的方法

    在C 43 43 中 xff0c 要实现这个功能 xff0c 就要用到std命名空间中常用于流的控制符 xff0c 这里通常要用到setprecision 函数 xff0c 可以通过这个函数控制小数点后面位数 还要注意的是 xff0c 使用
  • C++中string::npos的一些用法总结

    一 关于npos的定义 在MSDN中有如下说明 xff1a basic string npos static const size type npos 61 1 定义 The constant is the largest represen
  • CMake:通过target_link_libraries链接第三方库

    sdbusplus 通过new method call同步调用service的method 风静如云的博客 CSDN博客 例子中需要在编译时链接 lsdbusplus lsystemd 这两个第三方库 那么通过cmake怎么指定呢 其实很简
  • 在ubuntu终端打开谷歌浏览器的命令

    安装好谷歌浏览器后 xff0c 用以下命令在终端打开谷歌浏览器 adb shell am start n com android chrome com google android apps chrome Main 之后便出现如下内容 xf
  • PELCO_D通信协议

    1 球机通信接口 xff08 EIA RS 485 xff09 数据传输方式 xff1a 异步半双工串行通讯 通信波特率 xff1a 9600Bps 数据格式 xff1a Start Bit xff1a 1 Bit xff1b Data B
  • C buffer

    这学期在Dartmouth上ENGS20 Introduction to Scientific Computing xff0c 好多东西不记下来就会忘 xff0c 所以开一个笔记 在C语言中 xff0c 输入和输出都是有buffer的 xf