标签: feof

为什么这个C代码有问题?

在另一个问题上,Jerry Coffin指出了以下内容:

它(可能)与您的问题并不真正相关,但while (!feof(fileptr)){几乎是一个有保证的错误.

我想我会开始一个单独的问题,因为这个评论有些偏离主题.有人可以向我解释一下吗?这是我之前用C笔直接编写过的第一个程序.

c file-io while-loop feof

3
推荐指数
2
解决办法
641
查看次数

在C文件处理中的feof()

我正在逐字节读取二进制文件,我需要确定是否已达到eof.

feof()不起作用"只有在对不存在的字节进行读取请求时才设置eof".所以,我可以使用我的自定义check_eof:

if ( fread(&byte,sizeof(byte),1,fp) != 1) {
    if(feof(fp))
    return true;
}
return false;
Run Code Online (Sandbox Code Playgroud)

但问题是,如果没有达到eof,我的文件指针会向前移动一个字节.因此,解决方案可能是使用ftell()然后fseek()将其置于正确的位置.

另一种解决方案可能是在一些临时存储中缓冲前面的字节.

更好的解决方案?

c file-handling feof

3
推荐指数
1
解决办法
6909
查看次数

使用fscanf()使用feof()

这是我的代码.

#include<stdio.h>
void main(){
    FILE *fp;
    int a,b;
    fp=fopen("hello.txt","r");
    while(!feof(fp)){
      fscanf(fp,"%d %d",&a,&b);
      printf("%d %d\n",a,b);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的hello.txt是

1   2
3   4
Run Code Online (Sandbox Code Playgroud)

我的输出是

1   2
3   4
4   4
Run Code Online (Sandbox Code Playgroud)

为什么我的最后一行被打印两次.还没有fp达到EOF?

此外,stackoverflow中的标记说明Usually, when it is used, the code using it is wrong. 是什么意思?

谢谢.

c scanf feof

3
推荐指数
1
解决办法
2万
查看次数

如何使用feof(FILE*f)?

我在do-while循环中遇到了困难,当我们到达文件末尾时应该停止.这是循环代码:

do  {
    if (pcompanyRow[0] != '#' && pass == 1) {
        strtok(pcompanyRow, ":");
        pcompanyName = strcpy(pcompanyName, strtok(NULL, ""));
        pass = 2;
        fgets(pcompanyRow, 1024, f);
    }
    if (pcompanyRow[0] != '#' && pass == 2) {
        strtok(pcompanyRow, ":");
        pcompanySMSPrice = strcpy(pcompanySMSPrice, strtok(NULL , ""));
        pass = 3;
        fgets(pcompanyRow, 1024 , f);
    }
    if (pcompanyRow[0] != '#' && pass == 3) {
        strtok(pcompanyRow, ":");
        pcompanyMMSPrice = strcpy(pcompanyMMSPrice, strtok(NULL, ""));
        pass = 4;
        fgets(pcompanyRow, 1024, f);
    }
    if (pass == 4)  {
        AppendCompanyNode(pcompanyList, …
Run Code Online (Sandbox Code Playgroud)

c loops while-loop eof feof

2
推荐指数
1
解决办法
1万
查看次数

当未达到 EOF 时 feof() 返回 true

我正在尝试从特定偏移量的文件中读取(简化版本):

typedef unsigned char u8;
FILE *data_fp = fopen("C:\\some_file.dat", "r");
fseek(data_fp, 0x004d0a68, SEEK_SET); // move filepointer to offset
u8 *data = new u8[0x3F0];
fread(data, 0x3F0, 1, data_fp);
delete[] data;
fclose(data_fp);
Run Code Online (Sandbox Code Playgroud)

问题是,数据不会包含 1008 个字节,而是 529 个字节(看起来是随机的)。当达到 529 字节时,对 feof(data_fp) 的调用将开始返回 true。

我也尝试过读取较小的块(一次 8 个字节),但它看起来就像是在尚未到达 EOF 时那样。

在十六进制编辑器中简单查看一下就会发现还剩下很多字节。

c++ fopen feof

2
推荐指数
1
解决办法
826
查看次数

在 C 中使用 fscanf() 如何区分文件结尾和错误?

根据手册,int fscanf(FILE *stream, const char *format, ...)返回成功匹配和分配的输入项的数量,可以少于提供的数量,甚至在早期匹配失败的情况下为零。我该如何区分:

  • 零匹配和分配的项目
  • 文件结尾
  • 一个空文件?

c scanf eof feof

1
推荐指数
1
解决办法
138
查看次数

Paypal IPN脚本,feof和fgets的问题

我的Paypal IPN监听器脚本问题已经有几天了.对于那些不熟悉Paypal IPN系统的人来说,Paypal基本上会向您的脚本发送一条有关交易的消息,您可以通过添加几个位来发回该消息.如果Paypal收到正确的答复,它将回复'已验证',如果没有,它会说'无效'.

我最初认为我遇到的问题是'fsockopen'命令:$ fp = fsockopen('ssl://sandbox.paypal.com',443,$ errno,$ errstr,30); 但是,将我的所有代码简化为这一行,它似乎连接好了.问题在于'feof'和'fgets'命令.脚本挂断了,我不知道为什么.我基本上复制了Paypal IPN Listener网站上建议的代码,所以我认为它会起作用!如果你能帮助我理解为什么feof或fgets导致它失速,那么你的帮助将非常感激.

这是完整的脚本:

$postback = 'cmd=_notify-validate'; //doesn't matter what these include for now
$header='abc';

//Script has been activated, create debug
$filename = 'debug/debug1_script.txt';
$filehandle=fopen($filename, 'w');
fwrite($filehandle,$postback);
fclose($filehandle);


$fp = fsockopen ('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30);//open the connection

//no connection, create debug file
if(!$fp){
    $filename = 'debug/debug2_fpfail.txt';
    $filehandle=fopen($filename, 'w');
    fwrite($filehandle, $errstr.'('.$errno.')');
    fclose($filehandle);
    die();
}


//post data back
fputs($fp, $header . $postback);

//create debug file
$filename = 'debug/debug3_postback.txt';
$filehandle=fopen($filename, 'w');
fwrite($filehandle, $header.$postback); …
Run Code Online (Sandbox Code Playgroud)

php paypal fgets feof paypal-ipn

0
推荐指数
1
解决办法
4243
查看次数

C - 在阅读之前查找文件结尾

我有一个从二进制文件中读取“块”的类。我这样使用它:

while(log.HasNextBlock()) {
    block = log.GetNextBlock();
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果我在文件末尾,我需要检查函数 HasNextBlock() 的内部,在这种情况下我将返回 false。我正在尝试使用 feof() 来检查,但我读到在调用 feof() 之前我必须执行读取操作,但在我的情况下,读取操作是在 GetNextBlock() 中完成的,即在调用 feof 之后()。

有没有办法查看我是否在二进制文件的末尾而不执行会修改“上下文”的操作(即不更改文件中的当前位置或任何其他变量)?

谢谢你的帮助 !:)

c binary fread eof feof

0
推荐指数
1
解决办法
5241
查看次数

额外的EOF角色

我有一个程序将文件读​​入缓冲区结构.我遇到的问题是,当我查看文件的输出时,最后会有一个额外的EOF字符.发布相关功能:(注意:我删除了参数检查,只在与问题相关的功能中发布了代码)

b_load

int b_load(FILE * const fi, Buffer * const pBD){
    unsigned char character; /*Variable to hold read character from file*/
    Buffer * tempBuffer; /*Temparary Bufer * to prevent descruction of main Buffer*/
    short num_chars = 0; /*Counter of the amount of characters read into the buffer*/

    /*Assigns main Buffer to tempBuffer*/
    tempBuffer = pBD;

    /*Infinite loop that breaks after EOF is read*/
    while(1){
        /*calls fgetc() and returns the char into the character variable*/
        character = (unsigned char)fgetc(fi);

        if(!feof(fi)){
            tempBuffer …
Run Code Online (Sandbox Code Playgroud)

c feof

0
推荐指数
1
解决办法
1117
查看次数

函数`feof`始终返回1

我正在尝试读取大小为114,808字节的二进制文件.我为文件分配内存,然后尝试使用fopen和读取文件fread.第一次fread被调用时,它总是以274个字节读取,并且后续调用feof始终返回1,即使显然没有到达文件的末尾.为什么是这样?

根据MSDN文档为feof,"该FEOF函数返回非零值,如果读取操作已试图读到文件的结束;否则它返回0".所以我不明白是什么导致feof一直回归1.

这是我到目前为止的代码.任何帮助将非常感激.谢谢!

// Open source file with read-only access
if ( iError == ERROR_SUCCESS )
{
    #ifdef _MSC_VER
    #pragma warning(disable : 4996)
    #endif
    pFile = fopen( pSrcPath, "r" );

    if ( pFile == NULL )
    {
        iError = ERROR_FILE_NOT_FOUND;
    }
}

// Read in source file to memory
if ( iError == ERROR_SUCCESS )
{
    do
    {
        // Buffer pointer passed to fread …
Run Code Online (Sandbox Code Playgroud)

c c++ file-io feof visual-studio-2015

0
推荐指数
1
解决办法
201
查看次数

C中的文件识别不必要的行

我的程序应该读取一些段来标识一个平面.每行3个段.输入档案是:

3 4 25 -4 -30 2 6 7 9 10 3 4
3 4 4 -4 -3 2 6 7 9 10 5 6
Run Code Online (Sandbox Code Playgroud)

它被读作坐标:(3,4)(25,-4)( - 30,2)(6,7)(9,10)(3,4)

Segment将是一对坐标:S01 - (3,4)(25,-4),依此类推

代码:

typedef struct{
    int x1, x2;
    int y1, y2;
    int id;    
}Segment;

int main(){

    FILE *file;
    int i=0, j=0;
    Segment *seg;

   seg=(Segment*)malloc(500*sizeof(Segment));

   file = fopen("input.txt", "r"); 

    while(!feof(file)){

        for(i=0; i<3; i++){
                fscanf(file, "%d %d %d %d", &seg[j].x1, &seg[j].y1,  &seg[j].x2, &seg[j].y2);
                seg[j].id=i+1;
                printf("%d %d %d %d - ID: %d\n", seg[j].x1, seg[j].y1, …
Run Code Online (Sandbox Code Playgroud)

c file feof

0
推荐指数
1
解决办法
48
查看次数

使用fscanf()从文件中读取文本

伙计们,我想从我的文件中读取文本,并将每个字符分配给数组的单个元素

char A[1000];

FILE * fpointer;
fpointer=fopen("text.txt","r");

i=0;
while(!feof(fpointer))
{
    fscanf(fpointer,"%c",&A[i]);
    i=i+1;
}

fclose(fpointer);

for (i=0;i<100;i++)
{
    printf("%c",A[i]);
}

return 0;
Run Code Online (Sandbox Code Playgroud)

但问题是输出是一些奇怪的符号而不是文件的文本,这是"这只是一个测试".为什么会发生这种情况?

c file scanf feof

-2
推荐指数
1
解决办法
2642
查看次数

如果在 C 中不检查 feof 会发生什么?

在读/写操作期间是否绝对有必要检查feof()?

我问的原因是因为我有一个执行读/写一次的程序,下面是代码:

while (1) {

      data = read_file_data(file);
      write_file_data(data, filename);

      if (feof(file)) 
          print(read error)
}
Run Code Online (Sandbox Code Playgroud)

这只是伪代码,但是是否有必要检查feof()像这样一次读取的情况?目前,我认为只有当您在上面的阅读之后再阅读一遍时才有必要,如下所示:

while (1) {

      data = read_file_data(file);
      write_file_data(data, filename);

      if (feof(file))       // feof error occurred oops
          print(read error)

      data = read_file_data(file); // reading after error    
}
Run Code Online (Sandbox Code Playgroud)

EOF reached最后,即使发生错误(读过去) ,阅读会产生什么后果EOF?

c file-io pointers file feof

-2
推荐指数
1
解决办法
251
查看次数