Tag: stdin

读取stdin冲洗stdout吗?

当连接到终端时,stdout是行缓冲的,但我记得在某处阅读(至少从stdin)将自动刷新stdout。 我使用的所有C实现都已经完成了,但我现在无法在标准中找到它。 它确实有意义,它是这样的,否则代码是这样的: printf(“Type some input: “); fgets(line, sizeof line, stdin); 需要额外的fflush(stdout); 那么stdout保证会在这里刷新吗? 编辑: 正如几个回复所说,标准中似乎无法保证我的示例中的stdout输出将在从stdin读取之前出现,但另一方面,这个意图在(我的免费草稿副本)中说明了标准: 交互设备的输入和输出动态应按照7.19.3的规定进行。 这些要求的目的是尽快出现无缓冲或行缓冲输出,以确保在程序等待输入之前实际出现提示消息。 (ISO / IEC 9899:TC2委员会草案 – 2005年5月6日,第14页)。 所以似乎没有保证,但无论如何它可能适用于大多数实现。 (著名遗言…)

fflush(stdin)function不起作用

我似乎无法弄清楚这段代码有什么问题: #include #include #include #include #define MAX 100 #define TRUE 1 #define FALSE 0 char sect_cat; char customer_name[MAX]; char customer_number[MAX]; /* error handling is easier */ int prev_unit = 0; int current_unit = 0; int consumed = 0; int set = FALSE; float init_bill; float tax; float total_bill; void get_userinfo() { printf(“Enter sector category: “); […]

有没有办法偷看stdin缓冲区?

我们知道stdin默认是一个缓冲输入; 证据就是使用了在stdin上“保留数据”的任何机制,例如scanf() : int main() { char c[10] = {‘\0’}; scanf(“%9s”, c); printf(“%s, and left is: %d\n”, c, getchar()); return 0; } ./a.out 你好 你好,左边是10 10当然是新行…… 我一直很好奇,有没有办法“偷看” stdin缓冲区而不删除那里可能存在的东西? 编辑 一个更好的例子可能是: scanf(“%9[^.]”, c); 输入“at.ct”,现在我在stdin留下了“数据”( ct\n ),而不仅仅是换行符。

C读二进制stdin

我正在尝试构建一个指令管道模拟器,我在开始时遇到了很多麻烦。 我需要做的是从stdin读取二进制文件,然后在操作数据时以某种方式将其存储在内存中。 我需要一个接一个地读取正好32位的块。 我如何一次读取正好32位的块? 其次,我如何存储它以便以后操作? 这是我到目前为止所做的,但是检查我进一步阅读的二进制块,它看起来不正确,我不认为我正在读取我需要的32位。 char buffer[4] = { 0 }; // initialize to 0 unsigned long c = 0; int bytesize = 4; // read in 32 bits while (fgets(buffer, bytesize, stdin)) { memcpy(&c, buffer, bytesize); // copy the data to a more usable structure for bit manipulation later // more stuff buffer[0] […]