C 使用 scanf() 进行 |分隔字符串

2023-12-03

我想输入一些字符串然后两个整数。字符串由“|”分隔,而整数则由“.”分隔。

在网上浏览时我看到了某种语法,其中涉及[^]。我正在使用这个,但它根本不起作用。有人可以指出我应该做什么以及为什么我所做的事情是错误的吗?

sscanf(str, "%s[^|],%s[^|],%s[^|],%i[^|],%i[^.]", …);

语法充其量是晦涩难懂的——我建议使用不同的方法,例如strtok(),或使用字符串处理函数进行解析strchr() etc.

然而,您必须意识到的第一件事是%[^<delimiter-list>]格式说明符(行话中的“扫描集”,由 POSIX 记录)scanf()在许多其他地方)仅提取字符串字段 - 如果提取的字符串代表的是整数,则必须将其转换为整数。

其次,您仍然必须在格式说明符之外包含分隔符作为文字匹配字符 - 您已用逗号分隔格式说明符,其中|都在输入流中。

考虑以下:

#include <stdio.h>

int main()
{
    char a[32] ;
    char b[32] ;
    char c[32] ;
    char istr[32] ;  // Buffer for string representation of i
    int i ;
    int j ;          // j can be converted directly as it is at the end.

    // Example string
    char str[] = "fieldA|fieldB|fieldC|15.27" ;

    int converted = sscanf( str, "%[^|]|%[^|]|%[^|]|%[^.].%i", a, b, c, istr, &j ) ;

    // Check istr[] has a field before converting
    if( converted == 5 )
    {
        sscanf( istr, "%i", &i) ;
        printf( "%s, %s %s, %d, %d\n", a, b, c, i, j ) ;
    }
    else
    {
        printf( "Fail -  %d fields converted\n", converted ) ;
    }

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

C 使用 scanf() 进行 |分隔字符串 的相关文章

  • 创建 DirectoryEntry 实例以供测试使用

    我正在尝试创建 DirectoryEntry 的实例 以便可以使用它来测试将传递 DirectoryEntry 的一些代码 然而 尽管进行了很多尝试 我还是找不到实例化 DE 并初始化它的 PropertyCollection 的方法 我有
  • 自动从 C# 代码进行调试过程并读取寄存器值

    我正在寻找一种方法来读取某个地址的 edx 注册表 就像这个问题中所问的那样 读取eax寄存器 https stackoverflow com questions 16490906 read eax register 虽然我的解决方案需要用
  • Func 方法参数的首选命名约定是什么?

    我承认这个问题是主观的 但我对社区的观点感兴趣 我有一个缓存类 它采用类型的缓存加载器函数Func
  • 模板类的不明确多重继承

    我有一个真实的情况 可以总结为以下示例 template lt typename ListenerType gt struct Notifier void add listener ListenerType struct TimeListe
  • 嵌入式系统中的malloc [重复]

    这个问题在这里已经有答案了 我正在使用嵌入式系统 该应用程序在 AT91SAMxxxx 和 cortex m3 lpc17xxx 上运行 我正在研究动态内存分配 因为它会极大地改变应用程序的外观 并给我更多的力量 我认为我唯一真正的路线是为
  • 如何在我的应用程序中使用 Windows Key

    Like Windows Key E Opens a new Explorer Window And Windows Key R Displays the Run command 如何在应用程序的 KeyDown 事件中使用 Windows
  • 跨多个控件共享事件处理程序

    在我用 C 编写的 Windows 窗体应用程序中 我有一堆按钮 当用户的鼠标悬停在按钮上时 我希望按钮的边框发生变化 目前我有以下多个实例 每个按钮一个副本 private void btnStopServer MouseEnter ob
  • C# 中可空类型是什么?

    当我们必须使用nullable输入 C net 任何人都可以举例说明 可空类型 何时使用可空类型 https web archive org web http broadcast oreilly com 2010 11 understand
  • 如何针对 Nancy 中的 Active Directory 进行身份验证?

    这是一篇过时的文章 但是http msdn microsoft com en us library ff650308 aspx paght000026 step3 http msdn microsoft com en us library
  • c# Asp.NET MVC 使用FileStreamResult下载excel文件

    我需要构建一个方法 它将接收模型 从中构建excel 构建和接收部分完成没有问题 然后使用内存流导出 让用户下载它 不将其保存在服务器上 我是 ASP NET 和 MVC 的新手 所以我找到了指南并将其构建为教程项目 public File
  • .Net Core / 控制台应用程序 / 配置 / XML

    我第一次尝试使用新的 ConfigurationBuilder 和选项模式进入 Net Core 库 这里有很多很好的例子 https docs asp net en latest fundamentals configuration ht
  • 使用安全函数在 C 中将字符串添加到字符串

    我想将文件名复制到字符串并附加 cpt 但我无法使用安全函数 strcat s 来做到这一点 错误 字符串不是空终止的 我确实设置了 0 如何使用安全函数修复此问题 size strlen locatie size nieuw char m
  • 是否有比 lex/flex 更好(更现代)的工具来生成 C++ 分词器?

    我最近将源文件解析添加到现有工具中 该工具从复杂的命令行参数生成输出文件 命令行参数变得如此复杂 以至于我们开始允许它们作为一个文件提供 该文件被解析为一个非常大的命令行 但语法仍然很尴尬 因此我添加了使用更合理的语法解析源文件的功能 我使
  • C 中的位移位

    如果与有符号整数对应的位模式右移 则 1 vacant bit will be filled by the sign bit 2 vacant bit will be filled by 0 3 The outcome is impleme
  • 检查 url 是否指向文件或页面

    我们需要以下内容 如果文件确实是文件 则从 URL 下载该文件 否则 如果它是一个页面 则什么也不做 举个简单的例子 我有以下命令来下载文件 My Computer Network DownloadFile http www wired c
  • 作为字符串的动态属性名称

    使用 DocumentDB 创建新文档时 我想设置属性名称动态地 目前我设置SomeProperty 像这样 await client CreateDocumentAsync dbs db colls x new SomeProperty
  • 窗体最大化时自动缩放子控件

    有没有办法在最大化屏幕或更改分辨率时使 Windows 窗体上的所有内容自动缩放 我发现手动缩放它是正确的 但是当切换分辨率时我每次都必须更改它 this AutoScaleDimensions new System Drawing Siz
  • C++ 成员函数中的“if (!this)”有多糟糕?

    如果我遇到旧代码if this return 在应用程序中 这种风险有多严重 它是一个危险的定时炸弹 需要立即在应用程序范围内进行搜索和销毁工作 还是更像是一种可以悄悄留在原处的代码气味 我不打算writing当然 执行此操作的代码 相反
  • 如何连接字符串和常量字符?

    我需要将 hello world 放入c中 我怎样才能做到这一点 string a hello const char b world const char C string a hello const char b world a b co
  • 为什么 strtok 会导致分段错误?

    为什么下面的代码给出了Seg 最后一行有问题吗 char m ReadName printf nRead String s n m Writes OK char token token strtok m 如前所述 读取字符串打印没有问题 但

随机推荐

  • :属性查找 thread.lock 失败' aria-label='multiprocessing.Pool - PicklingError:无法 pickle :属性查找 thread.lock 失败'> multiprocessing.Pool - PicklingError:无法 pickle :属性查找 thread.lock 失败

    multiprocessing Pool让我发疯了 我想升级许多软件包 对于每一个软件包 我都必须检查是否有更高的版本 这是由check one功能 主要代码在Updater update方法 我创建 Pool 对象并调用map 方法 这是
  • 如何将一个值从一个jsp页面传递到另一个jsp页面?

    我有两个jsp页面 search jsp and update jsp 当我跑步时search jsp然后从数据库中获取一个值 并将该值存储在一个名为scard 现在 我想要的是在另一个 jsp 页面中使用该变量的值 我不想使用reques
  • blogdown 主页不再显示帖子目录

    我正在使用 blogdown 0 14 和稍微修改过的hugo lithium 主题 创建的博客的主页似乎已更改 它曾经是一个带有帖子目录的页面 而不是一个带有指向显示该目录的页面的链接的页面 有没有办法恢复旧的行为 一小时前提到过在推特上
  • 根据屏幕尺寸替换 HTML

    我试图在小屏幕尺寸下替换 HTML 内容 然后在窗口再次变大时替换它 我下面的代码可以工作 但是我如何让它删除更改 到目前为止 这是我的代码 window resize function if window innerWidth lt 48
  • IOCP 文档解释问题 - 缓冲区所有权歧义

    因为我不是以英语为母语的人 所以我可能会错过一些东西 所以也许这里有人比我更了解 取自WSASendMSDN 上的文档 lpBuffers 输入 指向 WSABUF 数组的指针 结构 每个WSABUF结构 包含一个指向缓冲区的指针和 缓冲区
  • Visual Studio - SharePoint 2010 - 包括程序集 > 快速问题

    我有一个简单的问题 构建 VS 2010 SharePoint 项目 并且我正在引用自定义程序集 我可以在我的代码中引用这个程序集 并且编写代码和所有内容都可以正常工作 当我将项目部署到 SharePoint 时 我的功能激活代码将不会运行
  • 在数据步骤中表达“PUT所有变量”以导出SAS数据

    目标 使用数据步骤将整个 SAS 数据集导出到制表符分隔的文本文件 问题 在我能找到的每个例子中 例如this one 必须指定 PUT 语句后面的数据步骤中的每个变量 难道没有一种简单的方法来只要求 所有 变量吗 我已经尝试过使用PUT
  • 将上传的文件作为电子邮件附件发送

    我是网页设计的新手 我需要用 HTML 创建一个表单 要求用户输入多个字段并上传他 她的简历 当他提交表格时 他的提交内容应该通过电子邮件发送给我 并附上他的简历作为电子邮件的附件 我使用 PHP 来发送电子邮件 一切正常 除了文件未附加到
  • 无法访问 XCTestCase 对象中的 AppDelegate(或引用它的任何内容)

    我正在尝试在我的 swift iOS 应用程序上开始单元测试 但遇到了完全的障碍 我似乎无法访问任何使用我的 appDelegate 的内容 我的 appDelegate 有一个UserController存储和管理登录用户及其各种数据的对
  • 用音频录制点击的按钮

    我正在创造一种乐器 我希望录制按钮可以录制音频和点击的内容 但是当我点击录制按钮时 它只录制音频 我想录制音频以及用户点击的内容 这是我的记录代码 public void startRecord throws Exception recor
  • 使用 sed 引用特殊字符

    我试图查看传递给我的程序的变量 变量是 1 并用所述特殊字符的引号形式替换任何特殊字符 以免特殊字符实际上执行通常的操作 我的代码是 bin sh target 1 newtarget echo target sed e s g newta
  • “数组/指针等效”的现代术语是什么?

    几乎每个阅读本文的人都可能熟悉有关 C 的以下三个关键事实 当您在表达式中提及数组的名称时 它 大多数情况下 计算结果为指向数组第一个元素的指针 数组下标 运算符 对于指针和数组来说同样有效 看似数组的函数参数实际上声明了一个指针 这三个事
  • 如何获取用户数据中的 AWS 实例标签?

    我将 aws ec2 userdata 与 windows powershell 脚本结合使用 我需要实例引导 我的想法是 EC2实例标签添加 它的键名称 Version 它的值 1 0 0 158 branchname 我尝试获取用户数据
  • 如何使用PHP和SQL Server 2008调用存储过程

    我正在使用 SQL Server 2008 和 PHP 我想在 PHP 中调用存储过程 请指导我 Regards read mssql execute conn mssql connect host user pass mssql sele
  • 是否可以在 C# 中使用 Microsoft 的脱机文件 API?

    我正在尝试弄清楚如何使用离线文件API来自 C 如果可能 我相信 如果 API 是 COM API 那么理论上我应该能够使用以下方法从 C 调用它here 不幸的是 我不知道它是否是 COM API 也不知道如何判断 作为一个更一般的旁注
  • 手动优化嵌套循环

    我正在做一项家庭作业 我必须手动优化嵌套循环 我的程序将在禁用优化的情况下编译 作业的目标是在 6 秒内运行整个程序 少于 4 5 秒的加分 我只允许更改一小块代码 起点是这样的 for j 0 j lt ARRAY SIZE j sum
  • Scala REPL“错误:值>不是类型参数T的成员”

    这是我的文件 trait Set T def contains x T Boolean def incl x T Set T def union that Set T Set T class Empty T extends Set T ov
  • 如何在Monodroid中使用dropnet、sharp box等库

    我已经在图像上传器上创建了一个桌面应用程序 现在我想使用 Monodroid 将其移植到 Android 应用程序将图像上传到保管箱 在桌面版本中 我使用了 dropnet 它引用了 sharpbox Json 等 有什么方法可以在我的 m
  • 如何让ANTLR消耗所有可见元素?

    这是我的语法 grammar test text foo EOF foo X foo foo foo tail tail foo 我正在解析这段文字 X X X X 这是我得到的树 语法应该改变什么才能让我只得到一个tail包含所有元素的集
  • C 使用 scanf() 进行 |分隔字符串

    我想输入一些字符串然后两个整数 字符串由 分隔 而整数则由 分隔 在网上浏览时我看到了某种语法 其中涉及 我正在使用这个 但它根本不起作用 有人可以指出我应该做什么以及为什么我所做的事情是错误的吗 sscanf str s s s i i