Tag: stdin

stdin中的文件结束

关于这个的问题已经在C中被问到文件结束(EOF),但它仍然没有完全解决我的问题。 在任何不是stdin数据流中, EOF对我有意义,例如,如果我有一些data.txt文件, fgetc()将读取所有字符并到达文件末尾并返回-1 。 我不明白的是stdin中EOF的概念。 如果我使用getchar() ,它将等待我输入内容,所以如果没有写入,文件结束,( EOF )不会自动返回? 那么只有用户可以通过按Ctrl + Z在stdin调用EOF吗? 如果是这样,那么在stdin中EOF一些用途是什么? 我猜它会告诉程序继续读取,直到用户调用文件结尾? 是这个吗? 谢谢

Scanf / Printf双变量C.

假设我在C中有以下代码: double var; scanf(“%lf”, &var); printf(“%lf”, var); printf(“%f”, var); 它从stdin变量’var’读取,然后在stdout’var’中打印两次。 我理解你是如何从stdin读取双变量的,但我的问题是: 为什么你可以用%lf打印双倍? 为什么你可以用%f打印双倍? 使用哪一种更好更正确?

C读取(来自stdin)停止在0x1a字符处

目前我正在为原始数据(如jpg等)实现Burrows-Wheeler变换(和逆变换)。 在对文本文件等普通数据进行测试时,不会出现问题。 但是当谈到读取jpg文件时,例如它停止读取字符0x1a又称替换字符。 我一直在互联网上搜索没有采用OS依赖代码但没有结果的解决方案…我想在二进制模式下读取stdin,但我觉得这并不容易。 有没有简单的方法来解决这个问题? 码: buffer = (unsigned char*) calloc(block_size+1,sizeof(unsigned char)); length = fread((unsigned char*) buffer, 1, block_size, stdin); if(length == 0){ // file is empty }else{ b_length = length; while(length == b_length){ buffer[block_size] = ‘\0’; encodeBlock(buffer,length); length = fread((unsigned char*) buffer, 1, block_size, stdin); } if(length != 0){ buffer[length] = ‘\0’; encodeBlock(buffer,length); } […]

来自stdin的read()不会忽略换行符

我使用以下条件语句来读取标准输入。 if ((n = read(0,buf,sizeof(buf))) != 0) 当从标准输入输入数据时,通常用户在完成时按下输入。 但read()将’\ n’视为输入,在这种情况下n = 1且条件不计算为false。 当用户在标准输入上按Enter(不输入任何内容)而不检查buf的内容时,是否有办法使条件计算为false。 除了read()之外还有其他function可以用于此目的吗? 就此而言,当输入来自标准输入(stdin)时,读取什么方式可以确定输入结束?

从终端读取input.txt文件和output.bmp文件(C编程)

我必须做一个我必须编写C-Programm的任务,它从控制台获取输入文件名作为命令行参数。 它应该将数据从input.txt文件(输入文件具有bmp文件的信息 – 颜色等)移动到生成的output.png文件中。 20个参数代表output.png图像的宽度和高度。 所以控制台请求(在Linux上测试)将如下所示: ./main input.txt output.bmp 20 20 我知道这段代码会读取一个input.txt文件并将其放在屏幕上。 FILE *input; int ch; input = fopen(“input.txt”,”r”); ch = fgetc(input); while(!feof(input)) { putchar(ch); ch = fgetc(input); } fclose(input); 这会(例如)将其写入output.png文件。 FILE *output; int i; output = fopen(“ass2_everyinformationin.bmp”, “wb+”); for( i = 0; i < 55; i++) { fputc(rectangle_bmp[i], output); } fclose(output); 但是这个代码只能工作,如果我直接在代码中硬编码名称,而不是使用命令行参数。 我没有任何线索,如何实现,我也没有在互联网上找到任何有用的信息,也许有人可以帮助我。 问候

用stdin识别箭头键

是否可以采用跨平台方式处理C或OCaml程序中的退格键和箭头键? 实际上,OCaml解决方案将受到赞赏,但许多标准的unix函数直接包装到相应的API调用中,因此移植C解决方案应该没有问题。 我要实现的是捕获箭头键以覆盖它在shell中的行为(通过重新定位最后一行或类似这样的操作)。 我认为这件事落在实际程序之前并且它不是由代码本身处理的,所以我不知道它是否可能。 该程序在Linux,OS X和Windows(在cygwin上)编译,所以我想在所有平台上进行编译。

C,冲洗stdin

我有使用fgets的问题。 该循环应该读取一行最大值。 19个字符,分析此char数组,然后等待下一个输入。 问题是如果输入的行输出19个字符,fgets将用剩余的字符填充str,直到输入Ctrl-D或换行符,从而启动一个没有新输入的新循环。 在读取19个字符后,输入(stdin)应以某种方式刷新,因此循环可以以干净的平板开始。 有人有解决方案吗? char str[20]; while((fgets(str, 20, stdin) != NULL)) { puts(str); //monitoring str if(str[0] == ‘q’) break; } 使用示例: hola hola //user inputs 9 chars + newline hola hola //puts writes hoo hoo hoo hoo hooh //user inputs 20 chars + newline hoo hoo hoo hoo hoo //puts writes h //

从文件或标准输入读取

我正在编写一个实用程序,它接受文件名或从stdin读取。 我想知道检查stdin是否存在的最强大/最快的方法(数据是否通过管道传输到程序),如果是,则读取该数据。如果不存在,则处理将在文件名上进行给出。 我已经尝试使用以下测试stdin大小,但我相信因为它是一个流而不是一个实际的文件,它不起作用,因为我怀疑它会,它总是打印-1 。 我知道我总是可以一次读取输入1个字符!= EOF但是我想要一个更通用的解决方案,所以如果stdin存在,我最终会得到fd或FILE *所以程序的其余部分将无缝运行。 我希望能够知道它的大小,等待前一个程序关闭流。 long getSizeOfInput(FILE *input){ long retvalue = 0; fseek(input, 0L, SEEK_END); retvalue = ftell(input); fseek(input, 0L, SEEK_SET); return retvalue; } int main(int argc, char **argv) { printf(“Size of stdin: %ld\n”, getSizeOfInput(stdin)); exit(0); } 终奌站: $ echo “hi!” | myprog Size of stdin: -1

使用带有指向stdin的文件指针的fseek

根据命令行参数,我设置一个文件指针指向指定的文件或stdin(用于管道)。 然后我将这个指针传递给许多不同的函数来从文件中读取。 这是获取文件指针的函数: FILE *getFile(int argc, char *argv[]) { FILE *myFile = NULL; if (argc == 2) { myFile = fopen(argv[1], “r”); if (myFile == NULL) fprintf(stderr, “File \”%s\” not found\n”, argv[1]); } else myFile = stdin; return myFile; } 当它指向stdin时, fseek似乎不起作用。 通过这个,我的意思是我使用它,然后使用fgetc ,我得到了意想不到的结果。 这是预期的行为吗?如果是,我该如何移动到流中的不同位置? 例如: int main(int argc, char *argv[]) { FILE *myFile = […]

如何用fgets()读取stdin?

我写了下面的代码来从终端窗口读取一行,问题是代码卡在无限循环中。 行/句子的长度是未定义的,因此我计划将其部分读入缓冲区,然后将其连接到另一个字符串,该字符串可以通过realloc相应的扩展。 有人可以发现我的错误或建议更好的方法来实现这个目标吗? #include #include #define BUFFERSIZE 10 int main (int argc, char *argv[]) { char buffer[BUFFERSIZE]; printf(“Enter a message: \n”); while(fgets(buffer, BUFFERSIZE , stdin) != NULL) { printf(“%s\n”, buffer); } return 0; }