gpt4 book ai didi

c - 为什么交错的 scanf() + printf() 语句导致先执行两个 scanf() 调用,然后执行两个 printf() 调用?

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

能否请您在以下代码中解释一件事:

#include<stdio.h>

int main()
{
int n;char ch,ch1;
scanf("%d\n",&n);
printf("d-%d \n",n);

scanf("\n%c",&ch);
printf("ch-%d \n",ch);

scanf("\n%c",&ch1);
printf("ch1-%d \n",ch1);

printf("%d %d %d\n",n,ch,ch1);
return 0;
}

为什么输入n的值后直接求ch的值然后直接执行语句打印各自的值即语句:

printf("d-%d \n",n);
printf("ch-%d \n",ch);

最佳答案

scanf("%d\n",&n); 在实际输入后跳过任意数量的尾随空白(包括无)。也可以写成scanf("%d ",&n);

scanf("\n%c",&ch); 在实际输入之前跳过任意数量的前导空白(包括无)。也可以写成scanf("%c",&ch);

注意:格式说明符中的空格可以跳过任意数量的空格。

跳过空格 是什么意思?

这意味着 scanf 重复地从输入中读取空白字符,直到它到达一个非空白 字符。现在缓冲区中没有剩余的空白字符
当它遇到一个非空白字符时,这个字符就会被放回去,以便在扫描下一个输入项或在下一次调用 扫描

现在来回答你的问题。

Why do interleaved scanf() + printf() statements result in both scanf() calls executing first, then both printf() calls?

我假设 n 的输入是 15。当您按下 Enter 键时,\n 字符将与输入缓冲区中的 15 一起出现。 scanf("%d\n",&n); 读取 15 然后跳过 \n。现在,此 scanf 等待输入一个非空白 字符(与您认为应该打印的 15 不同)。当您输入 a 时,它会将其放回以供下一次调用 scanf。下一条语句 scanf("\n%c",&ch); 从缓冲区中读取这个 a 并且不让用户输入 ch 的值。由于 nch 的值现在都被这些 scanf 读取了,看来这两个

printf("d-%d \n",n);
printf("ch-%d \n",ch);

scanf 调用之后执行(事实并非如此!)。

关于c - 为什么交错的 scanf() + printf() 语句导致先执行两个 scanf() 调用,然后执行两个 printf() 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20938220/

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