【问题标题】:using scanf and family to read in two strings separated by a space from a file in c使用scanf和family从c中的文件中读取两个由空格分隔的字符串
【发布时间】:2011-02-18 12:30:32
【问题描述】:

我正在尝试从文件中读取 2 个由空格分隔的字符串。

无论我尝试什么,我都会不断初始化第一个字符串,但第二个字符串始终为 NULL。

我尝试过的一些格式化程序是 "%s%s""%s %s""%s[\n\t ]%s"

对我做错了什么有任何想法吗?

我认为这与 scanf 的内部缓冲区有关——读取第一个 %s 然后将一些不可见字符放入缓冲区中读取第二个 %s 然后读取第二个字符串是 NULL 时完成。

【问题讨论】:

  • 你能发布你的完整代码示例吗?
  • 如果您只是发布了代码和输入,那么回答将是微不足道的。目前我们不得不猜测。从来都不是一个好主意。

标签: c scanf


【解决方案1】:

你的字符串是什么样的?

我不认为您关于 fscanf() 通过在缓冲区中放置“一些不可见字符”来修改输入数据的假设是正确的。

您的字符串似乎更有可能不符合 %s 格式说明符的要求。

【讨论】:

  • 我的假设可能是错误的,但两个字符串都确认为 %s。
  • 两个字符串分别是aa和bb
【解决方案2】:

在你的字符串之间,如果有只有一个空格

fscanf ( ..., "%s %s", ... ) ; // 你知道如何填充标有 ... 的空间

但如果不知道空格的数量:

char stack[YourscreenSize];
fscanf ( ..., "YourscreenSize[^\n]", stack );  // take all line in one data, 

然后解析它

如果不知道空格的数量,(第二种方式)

  • 从文件中获取数据
  • 检查一下,在 isgraph 函数中发送第一个字符,不管它是否是空格
  • 如果是空白,则擦除存储的数据

迭代地执行它。当您看到 EOF 从迭代中中断时,(您可以检查返回值 fscanf 知道它读取的是 char 还是 EOF )

【讨论】:

  • 我知道它们之间正好有 1 个空格
猜你喜欢
  • 1970-01-01
  • 2018-05-06
  • 1970-01-01
  • 2021-02-17
  • 2013-02-15
  • 2014-09-28
  • 1970-01-01
  • 2013-08-04
  • 1970-01-01
相关资源
最近更新 更多