gpt4 book ai didi

c - 为什么对 scanf 的调用会这样工作?这在标准中吗?

转载 作者:行者123 更新时间:2023-12-02 05:25:01 25 4
gpt4 key购买 nike

我在完成 K&R 练习 7.4 和 7.5 时发现了一个烦人的“功能”,我不相信标准状态。

根据 K&R,转换规范“%c”的作用方式

"The next input characters (default 1) are placed at the indicated spot. The normal skip over white space is suppressed; to read the next non-white space character, use %1s"

我的问题是,该声明是否应该这样读:

"The next input characters (default 1) are placed at the indicated spot. THEN, in successive calls to scanf in which %c is used again, the normal skip over white space is suppressed; to read the next non-white space character, use %1s"

...因为这段代码:

void test1()
{
char t1, t2;

scanf("%c %c", &t1, &t2);
printf("%d\n", t1);
printf("%d\n", t2);

//INPUT is: "b d" (without quotes)
}

结果为 t1 = 98 (b) 和 t2 = 100 (d)。 (跳过空格)

但是,这段代码:

void test2()
{
char t1, t2;

scanf("%c", &t1);
scanf("%c", &t2);
printf("%d\n", t1);
printf("%d\n", t2);

//INPUT is: "b d" (without quotes)
}

结果为 t1 = 98 (b) 和 t2 = 32 (' ')。 (空格 NOT 跳过)

阅读原文,我想任何有理智的人都会认为这意味着在对 scanf(%c) 的同一次调用中,空格跳过被抑制了。然而,情况似乎并非如此。

似乎为了恢复原来的功能,必须完全清空标准输入。

这应该以这种方式工作吗?有记录吗?因为我环顾四周,没有看到太多这方面的信息。

作为引用,我正在用 C99 编程。

最佳答案

这是因为传递给 scanf 的字符串中的一个空格意味着空格跳过。如果您删除空格并使用 "%c%c" 而不是 "%c %c",则第一个程序的行为将与第二个程序完全相同。

所以你的问题的答案是:正常的跳过总是被抑制,只是空间有魔力。

关于c - 为什么对 scanf 的调用会这样工作?这在标准中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4091990/

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