【问题标题】:Reading characters from a File with fscanf使用 fscanf 从文件中读取字符
【发布时间】:2014-02-10 03:49:47
【问题描述】:

我有一个问题,使用 fscanf 函数 :( 我需要从文件中提取一系列字符,例如“a b c d”(字符用空格分隔)。

但它不起作用:( 我如何阅读它们? (

我尝试打印它,结果不正确。我想,这是因为空间。我真的不知道为什么它不起作用。

请告诉我,数组访问有什么问题?

【问题讨论】:

  • 可能不占用空白空间,但我不知道fscanf() 是否足够确定。你说“它不起作用”,那是怎么回事?它有什么问题,比如,它做了什么,你希望它做什么?
  • 字符被放入数组alpArr。如果你不知道如何访问 C 中的数组,网上有很多教程...
  • 这对我来说似乎是正确的。错误可能在其他地方。您尝试打印 alpArr 数组吗?

标签: c++ c file char scanf


【解决方案1】:

来自cplusplus.com

该函数将读取并忽略在下一个非空白字符之前遇到的任何空白字符(空白字符包括空格、换行符和制表符——参见 isspace)。格式字符串中的单个空格会验证从流中提取的任意数量的空格字符(包括无)。

那么如果你的代码是:

while ( fscanf(fin,"%c", &array[i++]) == 1 );

你的文件是这样的:

h e l l o

您的array 将是:

[h][ ][e][ ][l][ ][l][ ][o]

如果您将代码更改为:

while ( fscanf(fin," %c", &array[i++]) == 1 );

使用相同的文件,您的array 将是:

[h][e][l][l][o]

无论如何,代码都可以工作:这取决于你想要什么。

无论如何,你应该考虑开始使用fgets() + sscanf(),例如:

char buff[NUM];

while ( fgets(buff, sizeof buff, fin) )
    sscanf(buff,"%c", &array[i++]);

对于单个fscanf(),缺乏缓冲区管理可能会导致缓冲区溢出问题。

【讨论】:

    【解决方案2】:

    在 %c 之前添加空格 =>

    while (fscanf(pFile," %c", &alpArr[i++]) == 1); 
    

    它应该可以工作。

    【讨论】:

    • @user3014909:如果答案解决了您的问题,请记得点击复选标记。
    猜你喜欢
    • 2017-05-03
    • 2017-06-25
    • 2023-03-17
    • 2012-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多