以下代码输出"非法搜索":
#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不可寻找,有什么方法可以做同样的事情吗?
谢谢您的回复.
由于我发现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().
大家好,我需要帮助。我想读取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读取迷宫并打印否.行和列.但是一旦我完全读取我的输入文件,我怎么能再次访问它以便我可以执行下一步呢?
#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)