scanf("%[^\n]",name); 的区别和 scanf(" %[^\n]",名称);

2023-12-19

这不是一个错字。对于那些没有注意到的人来说,第二个上有一个空格,第一个上没有空格。

当我做作业时,我会遇到这样的情况:

#include<stdio.h>

int main(){
int id,d,m,y;
char name[30];
printf("\tSTUDENT ID\t\t: ");scanf("%d",&id);\
printf("\tNAME\t\t: ");scanf("%[^\n]",&name);
printf("\tDATE OF BIRTH\t: ");scanf("%d/%d/%d",&d,&m,&y);
}

当我执行该代码时,“姓名”部分会跳到输入“出生日期”部分

但是,当我更改 scanf("%[^\n]",&name); 时进入 scanf(" %[^\n]",&name); 一切正常。

怎么会发生这种事?我似乎不明白这些差异

注意:你可以尝试一下,然后告诉我它在你的电脑上运行是否正常,因为可能只是我的电脑问题或其他问题


当你在 a 中添加一个空格时scanf http://en.cppreference.com/w/c/io/fscanf格式化字符串,然后scanf http://en.cppreference.com/w/c/io/fscanf会将其与任何长度的任何空格相匹配。因此,通过在格式中添加前导空格,scanf http://en.cppreference.com/w/c/io/fscanf实际上会跳过输入中的前导空格(包括前一个输入中的换行符)。

Example:

假设您的简单程序的输入是



123
Joe Bloggs
22/9/15
  

第一次致电scanf读取号码123,但保留您输入的换行符以结束输入缓冲区中的该输入行。当你下次打电话时scanf得到名字,然后scanf首先会看到换行符立即返回(没有消耗它,所以它仍然在输入缓冲区中)。然后你打电话scanf读取日期和"%d"格式自动跳过前导空格,所以scanf将消耗换行符,但随后看到名称,它将与十进制整数的格式不匹配并退出,而不是读取数据。

通过在读取名称时将前导空格添加到格式中,第二个scanf调用将从前一个输入中读取(并忽略)换行符,然后正确读取名称,将第二行中的终止换行符保留在输入缓冲区中,然后下一次调用会跳过该换行符scanf它可以正确读取日期。

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

scanf("%[^\n]",name); 的区别和 scanf(" %[^\n]",名称); 的相关文章

  • 将复选框添加到 UniformGrid

    我正在尝试将复选框动态添加到 wpf 中的统一网格中 但看起来网格没有为它们分配足够的空间 所以它们都有点互相重叠 这就是我将它们添加到后面的代码中的方法 foreach string folder in subfolders PathCh
  • 如何使用GDB修改内存内容?

    我知道我们可以使用几个命令来访问和读取内存 例如 print p x 但是如何更改任何特定位置的内存内容 在 GDB 中调试时 最简单的是设置程序变量 参见GDB 分配 http sourceware org gdb current onl
  • pthread_cond_timedwait() 和 pthread_cond_broadcast() 解释

    因此 我在堆栈溢出和其他资源上进行了大量搜索 但我无法理解有关上述函数的一些内容 具体来说 1 当pthread cond timedwait 因为定时器值用完而返回时 它如何自动重新获取互斥锁 互斥锁可能被锁定在其他地方 例如 在生产者
  • 从父类调用子类方法

    a doStuff 方法是否可以在不编辑 A 类的情况下打印 B did stuff 如果是这样 我该怎么做 class Program static void Main string args A a new A B b new B a
  • 如何在列表框项目之间画一条线

    我希望能够用水平线分隔列表框中的每个项目 这只是我用于绘制项目的一些代码 private void symptomsList DrawItem object sender System Windows Forms DrawItemEvent
  • 为什么#pragma optimize("", off)

    我正在审查一个 C MFC 项目 在某些文件的开头有这样一行 pragma optimize off 我知道这会关闭所有以下功能的优化 但这样做的动机通常是什么 我专门使用它来在一组特定代码中获得更好的调试信息 并在优化的情况下编译应用程序
  • C - 找到极限之间的所有友好数字

    首先是定义 一对友好的数字由两个不同的整数组成 其中 第一个整数的除数之和等于第二个整数 并且 第二个整数的除数之和等于第一个整数 完美数是等于其自身约数之和的数 我想做的是制作一个程序 询问用户一个下限和一个上限 然后向他 她提供这两个限
  • 将目录压缩为单个文件的方法有哪些

    不知道怎么问 所以我会解释一下情况 我需要存储一些压缩文件 最初的想法是创建一个文件夹并存储所需数量的压缩文件 并创建一个文件来保存有关每个压缩文件的数据 但是 我不被允许创建许多文件 只能有一个 我决定创建一个压缩文件 其中包含有关进一步
  • Web API - 访问 DbContext 类中的 HttpContext

    在我的 C Web API 应用程序中 我添加了CreatedDate and CreatedBy所有表中的列 现在 每当在任何表中添加新记录时 我想填充这些列 为此目的我已经覆盖SaveChanges and SaveChangesAsy
  • 将自定义元数据添加到 jpeg 文件

    我正在开发一个图像处理项目 C 我需要在处理完成后将自定义元数据写入 jpeg 文件 我怎样才能做到这一点 有没有可用的图书馆可以做到这一点 如果您正在谈论 EXIF 元数据 您可能需要查看exiv2 http www exiv2 org
  • C++ fmt 库,仅使用格式说明符格式化单个参数

    使用 C fmt 库 并给定一个裸格式说明符 有没有办法使用它来格式化单个参数 example std string str magic format 2f 1 23 current method template
  • 需要哪个版本的 Visual C++ 运行时库?

    microsoft 的最新 vcredist 2010 版 是否包含以前的版本 2008 SP1 和 2005 SP1 还是我需要安装全部 3 个版本 谢谢 你需要所有这些
  • 在 Dynamics CRM 插件中访问电子邮件发件人地址

    我正在编写一个 Dynamics CRM 2011 插件 该插件挂钩到电子邮件实体的更新后事件 阶段 40 pipeline http msdn microsoft com en us library gg327941 aspx 并且在此阶
  • C - 直接从键盘缓冲区读取

    这是C语言中的一个问题 如何直接读取键盘缓冲区中的数据 我想直接访问数据并将其存储在变量中 变量应该是什么数据类型 我需要它用于我们研究所目前正在开发的操作系统 它被称为 ICS OS 我不太清楚具体细节 它在 x86 32 位机器上运行
  • const、span 和迭代器的问题

    我尝试编写一个按索引迭代容器的迭代器 AIt and a const It两者都允许更改容器的内容 AConst it and a const Const it两者都禁止更改容器的内容 之后 我尝试写一个span
  • x86 上未对齐的指针

    有人可以提供一个示例 将指针从一种类型转换为另一种类型由于未对齐而失败吗 在评论中这个答案 https stackoverflow com questions 544928 reading integer size bytes from a
  • ASP.NET MVC 6 (ASP.NET 5) 中的 Application_PreSendRequestHeaders 和 Application_BeginRequest

    如何在 ASP NET 5 MVC6 中使用这些方法 在 MVC5 中 我在 Global asax 中使用了它 现在呢 也许是入门班 protected void Application PreSendRequestHeaders obj
  • 如何在 C++ BOOST 中像图形一样加载 TIFF 图像

    我想要加载一个 tiff 图像 带有带有浮点值的像素的 GEOTIFF 例如 boost C 中的图形 我是 C 的新手 我的目标是使用从源 A 到目标 B 的双向 Dijkstra 来获得更高的性能 Boost GIL load tiif
  • 使用 libcurl 检查 SFTP 站点上是否存在文件

    我使用 C 和 libcurl 进行 SFTP FTPS 传输 在上传文件之前 我需要检查文件是否存在而不实际下载它 如果该文件不存在 我会遇到以下问题 set up curlhandle for the public private ke
  • 使用按位运算符相乘

    我想知道如何使用按位运算符将一系列二进制位相乘 但是 我有兴趣这样做来查找二进制值的十进制小数值 这是我正在尝试做的一个例子 假设 1010010 我想使用每个单独的位 以便将其计算为 1 2 1 0 2 2 1 2 3 0 2 4 虽然我

随机推荐

  • iOS - 实现类似iMessage的滚动效果

    是否可以实现像这样的滚动效果iMessage在 iOS 8 中任何普通UITableView 最好使用 Swift因为它看起来很酷 您正在寻找的是 UIKit Dynamics 我前段时间也对此感兴趣 我参考这个链接来做到这一点 https
  • 更改 cmd 的当前工作目录(从子进程)

    所以我想写一个cd可以使用 cmd 执行的类似程序 并且在退出后 应该更改调用 cmd 进程的工作目录 现在 在这篇文章被标记为重复之前 我知道this https stackoverflow com questions 25944172
  • AddIdentity 与 AddIdentityCore

    在ASP NET Core中 可以添加各种服务进行识别 AddDefaultIdentity AddIdentity and AddIdentityCore 有什么区别AddIdentity and AddIdentityCore AddI
  • 无法将图像解析为 URL:to_model 委托给附件,但在 Rails 5.2 中附件为零

    我有以下表格 div h2 prohibited this user from being saved h2 ul li li ul div
  • 确定 postgres 数值最大值最小值

    在我的 PostgreSQL 表之一中 有一个数据类型为 Numeric 20 10 的属性结果 其输入值之一可以是 无穷大 我想知道长度 20 10 的最大值和最小值是多少 对于一个数字numeric precision scale 极限
  • 如何将向量 转换为向量 /string

    我们有一个遗留方法 它返回一个vectorchar 指针 即vector
  • 学习 C++:返回引用并绕过切片

    我在理解参考资料方面遇到了困难 考虑以下代码 class Animal public virtual void makeSound cout lt lt rawr lt lt endl class Dog public Animal pub
  • 带单引号的 Perl 单行代码

    我使用 Perl 单行语句创建 SQL 语句 但无法包含单引号 这就是我想要的 获取第一个字段并为其添加引号 echo a b perl F lane print F 0 a 我尝试了几种不同的方法 但对我来说没有用 echo a b pe
  • 邮递员表单数据有效,但原始等效项无效

    我有一个正在测试的 API 如果我通过 表单数据 提交具有以下值的数据 则它可以工作 key response comment value This is a test 但是 如果我在 原始 选项卡中使用以下结构执行一些自定义 JSON 则
  • 将非 www/ssl/尾部斜杠的重写与 .htaccess 中的大写->小写结合起来

    因此 我有一个简单的重写来捕获非 www URL 非 SSL url 和缺少尾部斜杠的 url 以重定向到 SSL www 和尾部斜杠 使用
  • 从后端到前端 Yii2 高级应用程序

    我正在尝试将一些控制器从前端链接到后端 几个小时后我不知道问题出在哪里 Backend file main php urlManager gt enablePrettyUrl gt false showScriptName gt false
  • C 中类型转换时的运算符优先级

    下面的代码给出了正确的乘法结果 int var0 245895 int var1 478565 long long val 0 val long long var0 var1 但这篇文章给出了错误的结果 int var0 245895 in
  • MatTable 上的多个过滤器

    我一直在尝试应用多列过滤 即列标题中的文本输入将仅过滤列的内容 到目前为止 我已经能够通过覆盖来使其工作filterPredicate of MatTableDataSource但是一旦我覆盖跨列的默认过滤就不再起作用 export cla
  • firefox flex 不会随着滚动条而增长

    我遇到了特定于 Firefox 的问题 据我所知 在 Chrome 中 如果你有 flex 0 0 auto overflow auto 当 y 方向溢出时 它会占用滚动条的额外宽度 一切都很好 但在 Firefox 中 它不会考虑额外的宽
  • 在 Promise 中断言函数调用

    我正在为异步 Node js 函数编写一些测试 该函数使用 Mocha Chai 和 Sinon 库返回承诺 假设这是我的功能 function foo params return mkdir params then dir gt writ
  • JBoss数据库连接池

    我是 jboss 的新手 我被要求将 jboss 连接池机制与现有的 Web 应用程序合并 考虑到 Web 应用程序数据库层已正确编写 即所有结果集 语句和连接在不需要时正确关闭 在正确配置 jboss 数据源后 我必须在 Web 应用程序
  • Android 中的静电安全吗?

    我在代码中使用一个静态类来定义一个静态字段 我在 Activity onStop onStart 调用之间重用该静态字段 这是一个场景 用户点击 授权 按钮 静态数据初始化 活动停止并调用 Web 浏览器 浏览器执行回调 Activity恢
  • 从客户端检索 Kafka 代理属性

    我想知道是否有一种方法可以使用 shell 命令检索 kafka 代理的所有配置属性 例如 类似的东西 kafka configs sh zookeeper broker ip 2181 entity type brokers descri
  • 无法将工件从中央 IntelliJ 传输到中央 IntelliJ

    我的 Spring boot 项目使用 Maven 当我使用 IntelliJ Community 构建它时 出现错误 无法将工件 com jolira hickory pom 1 0 0 从 转移到中央 https repo maven
  • scanf("%[^\n]",name); 的区别和 scanf(" %[^\n]",名称);

    这不是一个错字 对于那些没有注意到的人来说 第二个上有一个空格 第一个上没有空格 当我做作业时 我会遇到这样的情况 include