0

想知道关于 C 的一切,你能揭开它的神秘面纱吗

我正在使用涡轮增压 C

我有这个代码

scanf(“%d , %d”,&a,&b);
printf(“%d,%d”,a,b);
scanf(”%c”,&c);
printf(“%d,%d”,a,b);

然后 scanf 不扫描 c 的值

输出为:1,2

如果我用这个

scanf(“%d , %d”,&a,&b);
printf(“%d,%d”,a,b);
scanf(”%c ”,&c);//note a blank after %c
printf(“%d,%d”,a,b);

然后它扫描c的值。

输出为 1,2 1,2

相同的代码

scanf(“%d , %d”,&a,&b);
printf(“%d,%d”,a,b);
scanf(”%1s”,&c);
printf(“%d,%d”,a,b);

在此段中,将显示 a 的值,但将 b 的值设置为 0

输出为 1,2 1,0

你能解释一下这两个问题的答案吗?

没有得到答案但帮助我.......

4

2 回答 2

3

在您的最后一种情况下,这与在内存中设置值的位置有关。

第二个scanf将长度为 1 的字符串放在c- 的地址处,即一个字符,后跟空终止符。

猜猜空终止符在哪里?

于 2010-02-10T04:05:08.537 回答
1

你怎么知道c在第一种情况下没有字符被扫描?我认为这是因为您提供了未展示的打印声明并且什么也没看到。

仔细阅读手册页,了解 %c 说明符的行为:

c
匹配一系列宽度计数字符(默认为 1);next 指针必须是指向 char 的指针,并且必须有足够的空间容纳所有字符(不添加终止 NUL)。 前导空白的通常跳过被抑制。 要先跳过空格,请在格式中使用显式空格。

[重点补充]

如果您输入的形式像1, 2 a第一次扫描吃掉1 , 2并离开了a,那么第二次扫描吃掉空间。不确定第二个示例在这种情况下如何工作

匿名。是关于第三个案例的钱。

于 2010-02-10T05:00:31.710 回答