【问题标题】:C: fscanf does not change filestreamC: fscanf 不改变文件流
【发布时间】:2014-11-10 12:40:51
【问题描述】:

我正在编写一个用于从文本文件中读取数据的小型 c 程序。 我正在使用 c,但我的知识非常基础。

#define MAXLINELEN 200
void skipLines(FILE *, int );
int readnextval(FILE* , double *);

void main(int argc, char *argv[])
{
FILE* in_File=fopen("input.txt","r");

char buffer[MAXLINELEN];
    skipLines(in_File,HEADERLINES);
    fscanf(in_File," %[^0-9\n] ",buffer);
    printf("buffer =%s\n",buffer);
    fscanf(in_File," %[^0-9\n] ",buffer);
    printf("buffer =%s\n",buffer);
    fscanf(in_File," %[^0-9\n] ",buffer);
    printf("buffer =%s\n",buffer);
}

我的文本文件有 2 个标题行,下面的行类似于: SOMETEXT 值 值 值 控制台输出为:

buffer =SOMETEXT
buffer =SOMETEXT
buffer =SOMETEXT

为什么 fscanf 函数在读取缓冲区字符串后不移动指针。 我在预测这样的输出:

buffer =SOMETEXT
buffer = 
buffer = 

提前致谢!

【问题讨论】:

  • 这里的HEADERLINES 是什么?
  • HEADERLINES 在本例中是一个预定义常量,字面意思是 2(标题行数)
  • 阅读fscanf(3)。使用返回值。编译所有警告和调试信息 (gcc -Wall -g)。 使用您的调试器。 (gdb)
  • 返回值为:1(第一次调用),否则为零
  • 可能输入的某处有一个数字。显示 input.txt

标签: c io stream scanf


【解决方案1】:

问题解决了。感谢您提供帮助的 cmets。 在本例中,当 fscanf 找不到合适的字符串来存储(返回值==0)时,缓冲区值和流位置保持不变。

【讨论】:

    猜你喜欢
    • 2012-07-14
    • 1970-01-01
    • 1970-01-01
    • 2015-03-17
    • 2019-03-05
    • 2021-05-03
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多