【问题标题】:Read texts using sscanf使用 sscanf 阅读文本
【发布时间】:2015-11-11 19:16:03
【问题描述】:

我有一个关于使用 sscanf 函数的问题。

#include  <iostream>
#include  <stdio.h>

int main()
{
    char a[3];
    char b[4];
    const char* p = "aaaaaaaaaaaaaaaaaa bbbbbb";
    sscanf(p, "%2s %3s", a, b);
    std::cout << a << std::endl;
    std::cout << b << std::endl;
    return 0;
}

期望的输出是: 啊 bbb

实际输出为: 啊 啊

【问题讨论】:

  • 您的格式字符串的意思是“读取两个字符,然后跳过空格 - 如果有的话 - 然后读取三个字符”,这就是发生的事情。
  • @molbdnilo "%2s %3s" 更接近的意思是“跳过空白,如果有的话,读取 1 到 2 个非空白字符,跳过空白,如果有的话,读取 1 到 3 个非白色-空格字符”。

标签: c++ c scanf


【解决方案1】:

如果您想跳过所有字符到一个空格,请使用%*[^ ]

sscanf(p, "%2s%*[^ ] %3s", a, b);

% 后面的星号告诉sscanf 忽略输入的相应部分。

这会产生所需的输出 (demo 1)。

为什么这个案例不起作用?

char a[5];
char b[6];
const char* p = "word word2 , word";
sscanf(p, "%4s%*[^ ] %5s", a, b);

这不起作用,因为 %s%[...] 不能很好地混合。将%Ns 替换为%N[^ ]

sscanf(p, "%4[^ ]%*[ ]%5[^ ]", a, b);

demo 2.

【讨论】:

    猜你喜欢
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-19
    • 2013-09-01
    • 1970-01-01
    相关资源
    最近更新 更多