【问题标题】:How To Read in Strings that only Contain Alphabet letters with fscanf?如何使用 fscanf 读取仅包含字母的字符串?
【发布时间】:2011-04-18 00:52:53
【问题描述】:

我一直在努力找出 fscanf 格式。我只想读入由空格分隔的单词文件。我想丢弃任何包含非字母字符的字符串。

char temp_text[100];
while(fscanf(fcorpus, "%101[a-zA-Z]s", temp_text) == 1) {
  printf("%s\n", temp_text);
}

我已经尝试了上面的代码,无论有没有's'。我在另一个 stackoverflow 线程中读到,像这样使用的 s 将被解释为文字 's' 而不是字符串。无论哪种方式 - 当我包含 s 和不包含 s 时 - 我只能从正在阅读的文件中获取第一个单词以打印出来。

【问题讨论】:

    标签: c scanf


    【解决方案1】:

    %[ 扫描说明符不会跳过前导空格。在它之前或末尾添加一个空格来代替您的s。此外,您的 100 和 101 倒退,因此存在严重的缓冲区溢出错误。

    【讨论】:

    • 感谢两次更正!我更改了宽度参数,并在 ']' 之后添加了一个空格来代替 s,现在一切正常:-) 作为一个更普遍的问题,最好只在类型说明符用于您想要的确切目的时使用?您是否发现自己将类型说明符与修饰符结合使用?
    • 我发现自己很少使用scanf 系列函数。每次我尝试使用它们时,都会与我试图获得的行为略有偏差,这要么难以解决,要么无法解决。通常fgets 甚至fgetc 最终会更容易使用。
    【解决方案2】:

    不需要 s。

    以下是一些可以尝试的方法:

    打印出 fscanf 的返回值,确保为 1。

    通过使用 fgetc 获取下一个字符并将其打印出来,确保 fscanf 正在使用空格。

    【讨论】:

    • 啊。你帮我发现了 R. 的内容,下一个空格没有被读取。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2012-09-07
    • 1970-01-01
    • 2016-02-18
    • 2019-03-09
    • 1970-01-01
    • 2013-05-27
    • 1970-01-01
    • 2021-12-13
    相关资源
    最近更新 更多