“printf”和“scanf”,流出现问题。

3

这是我的代码。

int main(int argc, char* argv[])
{
    char c;
    size_t place;
    while (1) {
        scanf("%c %u", &c, &place);
        printf("%c\n", c);
    }
    return 0;
}

当我编译并运行程序时,我期望看到类似于这样的终端:

a 1
a
b 2
b
c 3
c

但我看到了这个:(一些额外的'\ n')
a 1
a
b 2


b
c 3


c

请帮助我找出我的错误所在。


1
@user3121023 我认为这个评论比答案本身更有用。 - arielnmz
非常感谢,它有效了。但是您能否请解释一下为什么我的期望不正确? - pointer
2个回答

3
您可以尝试像这样操作:
scanf(" %c %u", &c, &place);
      ^^--Add space here

替代

scanf("%c %u", &c, &place);

2

printf("char is %c\n", c); 在打印接收到的字符之前添加一些字符串,可以帮助您更清楚地了解它为什么会表现出这样的行为。在输入一些空格或换行符后,这将用于下一个scanf。您甚至可以打印字符的ASCII值,如printf("char is %d, %c", c, c);并在 ASCII表中搜索ASCII值,以确切地了解scanf错误地接收到了哪个值(空格、换行符或制表符)。

scanf的格式字符串的第一个字符处保留空格,将有助于跳过所有前导空格(包括制表符和换行符)。例如:scanf(" %c %u", &c, &place);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接