A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 欢子 中级黑马   /  2015-7-14 10:14  /  2537 人查看  /  32 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在scanf中输入字符型和整数混合时再用printf打印出来,输入得数和打印的为什么不一样。例如 int a,b=1 ; char ch; scanf("%d%c%d",&a,&ch,&b); printf("d%,c%,d%",a,ch,b);  如果键盘输入10 y 8,然后回车打印出的确实10 '  '  1 ,,求大神给解释下为什么。

32 个回复

倒序浏览
这样输入,第二个字符变量接收的是回车  而不是你输入的y
回复 使用道具 举报
本帖最后由 泡泡龙 于 2015-7-14 12:15 编辑

空格也是字符哦,它被第二个接受了,而第三个不能接受y,所以输出的值还是原来的值1
回复 使用道具 举报
空格被当做字符处理了,更改为scanf("%d,%c,%d",&a,&ch,&b); printf("d%,c%,d%",a,ch,b);  键盘输入10,y,8
回复 使用道具 举报
欢子 来自手机 中级黑马 2015-7-14 13:11:19
报纸
[quote]983616547 发表于 2015-7-14 13:05
空格被当做字符处理了,更改为scanf(

嗯嗯,OK了
回复 使用道具 举报
欢子 来自手机 中级黑马 2015-7-14 13:12:24
地板
泡泡龙 发表于 2015-7-14 12:13
空格也是字符哦,它被第二个接受了,而第三个不能接受y,所以输出的值还是原来的值1 ...

嗯嗯,多谢多谢
回复 使用道具 举报
这是第二天里面的视频吧 我做了笔记 看了笔记你就懂了 scanf的注意事项:1 scanf函数遇到回车的时候,会结束执行                   2 接收当个变量值的时候,再输入值之前,如果我们输入了空格 回车 tab 都会被忽略;                  3 %d%d表示输入两个十进制整数 中间不用逗号隔开 ;要求我们在键盘上输入的时候,输入两个整数                  4 并且以空格或者回车隔开不能在中间使用逗号或者其他符号,如 12  34 ;当输入完一个数以后,如果中间添加了回车 空格 tab都会被忽略;                  5 如果是多个格式控制符混合输入 是 如 scanf(“%d%c%d”,&a,&ch,&b)这是在%d%c%d的中间就必须加入逗号 而且再输入的时候也必须中间加逗号输入                    否则输入会出错;                              6 scanf(“%d%*d%d”,a,b,c)这个%*d表示这个数不会输入 会跳过;                   scanf运行的原理:1.当用户输入内容以后,用户输入的内容会被存放到scanf的输入缓冲区中,然后,scanf函数会根据格式控制的字符的要求,送输入缓冲区一次取它想要的内容,                    如果 从缓冲区中取得内容和我们的格式要求一致,则把值存放到变量中;如果格式不一致,则不修改变量的值;                  2.如果scanf缓冲区中还有内容,则scanf不会提示我们再次输入  例如 :scanf(”%d%c%d“,&a,&ch,&b)加入你输入12 空格 a 空格 45 ;它会依次取值12 空格 和a 但是a是字符不是%d格式,                    格式不相符就不会取值了;                    int a=1 b=-1                   char ch=‘a’                  scanf("%d",&a);                  scanf("%c",&ch);                  scanf("%d",&b);                  printf("%d,%c,%b",a,ch,b);                  如果你想要输出a=12 ch为a b为45;这时候如果你直接输出三次 12 a b 不会显示出来因为scanf中的缓冲区中有五个中间包括了两个enter 如果想要按理想的输出三个数                  可以在scanf("%c",&ch);下面在输入一次scanf("%c",&ch);这样scanf("%c",&ch)就会吸收掉中间的那个空格 b也会直接在缓冲区中找到45这个整数而忽略掉中间的那个空格;                                             
回复 使用道具 举报

scanf函数小结

本帖最后由 紫荆秋雪 于 2015-7-14 18:52 编辑

推荐输入格式:
#include <stdio.h>
int main()
{
    int a,b;
    char ch;
    scanf("%d,%c,%d",&a,&ch,&b);
    //scanf("%c",&ch);
    //scanf("%d",&b);
    printf("%d,%c,%d",a,ch,b);
}
输入格式 1,y,1
回复 使用道具 举报
欢子 中级黑马 2015-7-14 20:10:41
9#
wxh794708907 发表于 2015-7-14 13:59
这是第二天里面的视频吧 我做了笔记 看了笔记你就懂了 scanf的注意事项:1 scanf函数遇到回车的时候,会结 ...

谢谢,笔记做的真棒。
回复 使用道具 举报
紫荆秋雪 发表于 2015-7-14 17:39
推荐输入格式:
#include
int main()

谢谢你呢!!!!!
回复 使用道具 举报

因为我是新手,不怎么会用这个平台,我总结了scanf函数的一些用法及其注意事项,还配有例子,但是好像太多了在这里不能发,我正准备放到日记中,不清楚可不可以,到时你可以看看,希望对你有帮助。
回复 使用道具 举报
10 和y之间有了空格被第二个字符接收了
回复 使用道具 举报
空格被当成字符接受了  所以会出现这样 正确的scanf("%d,%c,%d",&a,&ch,&b); printf("d%,c%,d%",a,ch,b); %后面加逗号就好了
回复 使用道具 举报
紫荆秋雪 发表于 2015-7-14 20:56
因为我是新手,不怎么会用这个平台,我总结了scanf函数的一些用法及其注意事项,还配有例子,但是好像太 ...

你可以看看我总结的scanf函数
http://bbs.itheima.com/thread-213520-1-1.html
回复 使用道具 举报
= =一群大神啊,虽然会,但一看,感觉也有漏点的没看···
回复 使用道具 举报
        很给力!期待楼主讲讲来黑马第一周的事情
回复 使用道具 举报
紫荆秋雪 发表于 2015-7-14 20:56
因为我是新手,不怎么会用这个平台,我总结了scanf函数的一些用法及其注意事项,还配有例子,但是好像太 ...

现在懂了,很感谢你,希望以后多多交流
回复 使用道具 举报
飞哥 发表于 2015-7-14 22:01
很给力!期待楼主讲讲来黑马第一周的事情

我还去呢,正在自学,报了八月的黑马双元
回复 使用道具 举报
飞哥 发表于 2015-7-14 22:01
很给力!期待楼主讲讲来黑马第一周的事情

我还去呢,正在自学,报了八月的黑马双元
回复 使用道具 举报
卖毛玉的小贩 发表于 2015-7-14 21:54
= =一群大神啊,虽然会,但一看,感觉也有漏点的没看···

我可是渣渣:'(自学中,报的八月分的双元班
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马