相关疑难解决方法(0)

ftell(stdin)导致非法搜索错误

以下代码输出"非法搜索":

#include <stdio.h>
#include <errno.h>
#include <string.h>

int main() {
    errno = 0;
    getchar();
    getchar();
    getchar();
    ftell( stdin );
    printf( "%s\n", strerror(errno) );
}
Run Code Online (Sandbox Code Playgroud)

当我运行"cat script | ./a.out"以及运行"./a.out"时,会发生这种情况.当然,问题在于ftell.我的问题是:为什么会发生这种情况?我认为stdin可以寻找.fseek也会导致同样的错误.如果stdin不可寻找,有什么方法可以做同样的事情吗?

谢谢您的回复.

c file-io ftell

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

可以使用fseek(stdin,1,SEEK_SET)或倒带(stdin)来刷新输入缓冲区而不是非便携式fflush(stdin)吗?

由于我发现fflush(stdin)不是一种可移植的方式来处理熟悉的"新行潜伏在输入缓冲区中"的问题,所以当我必须使用时,我一直在使用以下内容scanf:

while((c = getchar()) != '\n' && c != EOF);
Run Code Online (Sandbox Code Playgroud)

但今天我偶然发现了我在cflplus.com上关于fflush注意到的这一行:

fflush()...在打开以进行更新的文件中(即,打开以进行读取和写入),在执行输入操作之前,应在输出操作之后刷新流.这可以通过重新定位(fseek,fsetpos,rewind)或通过显式调用fflush来完成

事实上,我已经多次阅读过了.所以我想确认一下,我是否可以简单地使用以下任何一种方法,scanf()以便在fflush(stdin)支持时提供同样的服务:

fseek(stdin,1,SEEK_SET);
rewind(stdin);
Run Code Online (Sandbox Code Playgroud)

PS rewind(stdin)似乎非常安全,可以刷新缓冲区,我错了吗?

错误我应该提到,fseek(stdin,0,SEEK_SET)如果我们正在讨论,stdin因为我们不能使用0或0之外的任何偏移量ftell().

c fseek fflush input-buffer

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

我如何在标准输入中寻找

大家好,我需要帮助。我想读取stdin16 个字节。我转换成十六进制形式的每个字节。有没有一种方法可以使用read()函数从头读取 NOT,例如从第二个字节读取?另外我怎么知道我是否已经阅读了全文stdin?- 这样我就可以循环调用这个函数,直到我读完整个stdin

这是我做的一个函数:

void getHexLine()
{

  int n = 16;
  char buffer[n];
  read(STDIN_FILENO, buffer, n);
  buffer[n]='\0';
  //printf("%08x", 0); hex number of first byte on line - not working yet
  putchar(' ');
  putchar(' ');
  //converting every byte into hexadecimal
  for (int i = 0;i < 16;i++ )
  {
    printf("%x", buffer[i]);
    putchar(' ');
    if (i == 7 || i == 15)
        putchar(' ');


  }
  printf("|%s|\n", buffer);
} 
Run Code Online (Sandbox Code Playgroud)

输出应该是这样的,但可以选择从第二个字节开始。

[vcurda@localhost proj1]$ echo "Hello, world! …
Run Code Online (Sandbox Code Playgroud)

c stdin

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

如何在C程序中多次读取stdin中的数据

我正在用C编写程序来解决迷宫游戏.输入迷宫文件将从标准输入读取.我写了下面的程序,从stdin读取迷宫并打印否.行和列.但是一旦我完全读取我的输入文件,我怎么能再次访问它以便我可以执行下一步呢?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

#define BUFFERSIZE (1000)


struct maze {
    char ** map;
    int startx, starty;
    int numrows;
    int initdir;
};

void ReadMaze(char * filename, struct maze * maze);

int main(int argc, char *argv[]) {
    struct maze maze;


    ReadMaze(argv[1], &maze);

    return EXIT_SUCCESS;
}


/*  Creates a maze from a file  */

void ReadMaze(char * filename, struct maze * maze) {
    char buffer[BUFFERSIZE];
    char mazeValue [BUFFERSIZE][BUFFERSIZE];
    char ** map;
    int rows = 0, foundentrance = 0, …
Run Code Online (Sandbox Code Playgroud)

c struct pointers

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

标签 统计

c ×4

fflush ×1

file-io ×1

fseek ×1

ftell ×1

input-buffer ×1

pointers ×1

stdin ×1

struct ×1