gpt4 book ai didi

c - fseek(stdin,0,SEEK_SET) 和 rewind(stdin) 确实会刷新输入缓冲区 "stdin"。可以使用它们吗?

转载 作者:太空宇宙 更新时间:2023-11-04 04:49:51 32 4
gpt4 key购买 nike

<分区>

我从一开始就在想为什么 fseek(stdin,0,SEEK_SET)rewind(stdin) 不能刷新输入缓冲区,因为它写得很清楚在 cplusplusreference 中调用这两个函数刷新缓冲区(输入或输出无关)。但由于整个想法似乎很新,我昨天把它放在一个笨拙的问题中。

Can fseek(stdin,1,SEEK_SET) or rewind(stdin) be used to flush the input buffer instead of non-portable fflush(stdin)?

我对我得到的答案持怀疑态度,这些答案似乎暗示我做不到。坦率地说,我没有理由不这样做。今天我自己试了一下,它有效!!我的意思是,要在使用多个 scanf() 语句时处理 newline 潜伏在 stdin 上的问题,似乎我可以使用 fseek(stdin,0 ,SEEK_SET)rewind(stdin) 代替不可移植和 UB fflush(stdin)

请告诉我这是否是一种没有任何风险的正确方法。到目前为止,我一直在使用以下代码来处理 stdin 中的换行符:while((c = getchar( )) != '\n' && c != EOF);.下面是我的代码:

#include <stdio.h>

int main ()
{
int a,b;
char c;
printf("Enter 2 integers\n");
scanf("%d%d",&a,&b);
printf("Enter a character\n");

//rewind(stdin); //Works if activated
fseek(stdin,0,SEEK_SET); //Works fine

scanf("%c",&c); //This scanf() is skipped without fseek() or rewind()
printf("%d,%d,%c",a,b,c);

}

在我的程序中,如果我不使用 fseek(stdin,0,SEEK_SET)rewind(stdin) 中的任何一个,则第二个 scanf( ) 被跳过,换行符总是 被当作字符。如果我使用 fseek(stdin,0,SEEK_SET) 问题就解决了倒带(标准输入)

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com