我使用“fprintf”向标准输入写入一些内容,但“scanf”无法读取它

问题描述 投票:0回答:1

这是我的代码:

int i,j;
    
fprintf(stdin,"100 1010");
printf("%s\n",stdin); 
scanf("%d%d",&i,&j);
printf("%s\n",stdin); 

我尝试向stdin写入两个数字,然后我想让scanf接受这些参数,但是当程序运行时,我仍然需要输入一些东西,而scanf似乎没有直接从stdin读取任何内容。

当我打印stdin的内容时,两次都出现乱码。

我猜测上面使用 fprintf 向 stdin 写入内容的代码是无效的。

是这样吗?我很好奇 stdin 到底是什么? stdin 如何将我在键盘上输入的内容放入其输入缓冲区?

c
1个回答
0
投票

我认为您误解了

stdin
是什么。它是一个
FILE*
,因此将其写为字符串是未定义的行为(您在
printf
调用中执行此操作)。请参阅stdin 到底是什么? 了解更多详细信息。我很难找到一个好的参考资料(here是一个有问题的参考资料),但我认为标准输入可能仅打开用于阅读,所以我不确定您的代码是否可以正常工作。

此外,您的 scanf 中的

%d
之间缺少一个空格。

不过,我确实同意评论者的观点。您可能只需要 sscanf。或者可能是 shell 重定向(将文件重定向为标准输入而不是交互式输入)。

© www.soinside.com 2019 - 2024. All rights reserved.