gpt4 book ai didi

c - 当我尝试实现 scanf() 时出现问题

转载 作者:行者123 更新时间:2023-11-30 18:37:50 24 4
gpt4 key购买 nike

我想实现一个 scanf() ,我发现了一个 Improve this question (我将其命名为 new_scanf() ),它使用 fgets()vfscanf() 中的特定流获取输入。

这是我的测试程序,

int main() {
int a, b;
new_scanf("%d", &a);
new_scanf("%d", &b);
printf("a=%d b=%d", a, b);
}

这个程序在我输入时运行

123 <enter>
456 <enter>
a=123 b=456 ;program shows result correctly

但是我打字时出了问题

123 456 <enter>
;the program is stuck here waiting for another input. scanf() should

不要被困在这里

new_scanf() 的这种行为与 glibc 的 scanf() 不同,我不知道如何解决它,谁能告诉我如何完美模拟 scanf()

最佳答案

当然你不能使用fgets()实现scanf来读取输入流,你必须用getchar()仔细地一次读取一个字节getc(stdin)fgetc(stdin) 并放回不应由 ungetc() 消耗的第一个字节。正确实现 scanf() 是一项艰巨的任务。处理所有选项和格式的完整实现非常困难。

您引用的实现在文件开头有一个警告:

/*
* ** This not been very well tested.. it probably has bugs
*/

它仅处理不合格的整数格式doux和非标准 b、字符c 和字符串s 格式。不支持longlong long或任何其他类型变体,不支持浮点,许多strncpy实例,其中大多数不正确。 ..对于您自己的实现来说不是一个良好的基础。

关于c - 当我尝试实现 scanf() 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35734049/

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