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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 骑着飞机去看海 于 2014-7-8 09:57 编辑

刚才在做scanf函数时发现scanf函数对于char类型的数据无法多次获取,但是对于int类型就可以,明杰在视频上也没有讲scanf对%c的数据多次不接收啊,这个怎么做?如何才能完成我的程序?代码如下
  1. #include <stdio.h>

  2. int main()
  3. {
  4.     /*
  5.      这是一个输出你所输入的字母的程序
  6.      */
  7.     char c;
  8.     char d;
  9.     printf("请输入第一个字母\n");
  10.     scanf("%c",&c);                               //获取第一次输出的字母
  11.     printf("请输入第二个字母\n");
  12.     scanf("%c",&d);                             //获取第二期输出地字母
  13.     printf("输入的第一个字母是%c,输入的第二个字母是%c",c,d );      //输出两次获取的字母
  14.     /*
  15.      这是一个输出你所输入的数字的程序
  16.      */
  17.     int a;
  18.     int b;
  19.     printf("请输入第一个数字\n");
  20.     scanf("%d",&a);//获取第一次输出的数字
  21.     printf("请输入第二个数字\n");
  22.     scanf("%ds",&b);//获取第二次输出地数字
  23.     printf("输入的第一个字母是%d,输入的第二个字母是%d",a,b  );//输出两次获取的数字

  24.     return 0;
  25. }
复制代码

在第一个程序中假如输入s后敲击回车键输出的是
请输入第一个字母
s
请输入第二个字母
输入的第一个字母是s,输入的第二个字母是
请输入第一个数字
而第二个程序运行都正常,这是怎么回事?
如何才能实现第一个程序的运行啊,不要改变输出样式啊。

评分

参与人数 1技术分 +1 收起 理由
傘が咲く + 1

查看全部评分

13 个回复

正序浏览
lipeiaiwo 发表于 2014-7-9 22:19
恩,谢谢,到时候注意点..

恩,加油哈 继续努力!
回复 使用道具 举报
骑着飞机去看海 发表于 2014-7-8 09:57
那你可得注意呀,虽说oc不用scanf接收,明杰的视频里没说这方面的事。

恩,谢谢,到时候注意点..
回复 使用道具 举报
zhs 中级黑马 2014-7-8 16:47:15
12#
小问题,大注意,又学到新东西`
回复 使用道具 举报
lipeiaiwo 发表于 2014-7-7 18:32
虽然还没看那么远, 还是顶顶。。。

那你可得注意呀,虽说oc不用scanf接收,明杰的视频里没说这方面的事。
回复 使用道具 举报
虽然还没看那么远, 还是顶顶。。。
回复 使用道具 举报
骑着飞机去看海 来自手机 中级黑马 2014-7-7 18:23:43
9#
fantacyleo 发表于 2014-7-6 22:54
scanf用%c一定要小心,%c是接收空白字符的,这和%d,%s不一样。具体可看我的帖子:http://bbs.itheima.com/ ...

恩,可以,我试了,也可以~~
回复 使用道具 举报
骑着飞机去看海 来自手机 中级黑马 2014-7-7 13:00:38
8#
fantacyleo 发表于 2014-7-6 22:54
scanf用%c一定要小心,%c是接收空白字符的,这和%d,%s不一样。具体可看我的帖子:http://bbs.itheima.com/ ...

额……这个一会试试,不过知道怎么做了,加一个getchar()就可以了……
回复 使用道具 举报
骑着飞机去看海 来自手机 中级黑马 2014-7-7 12:47:06
7#
chengnuoaini030 发表于 2014-7-6 22:53
你的意思是第一个程序里面无法读入第二个字母嘛?

恩,对。
回复 使用道具 举报
丶白菜你个小番 发表于 2014-7-6 22:39
因为你的回车就是一个字符。你可以把代码改成

我就是想分别输入,不在一起输入字母,输入一个就提示一下,在输入第二个,这样输入,不是一次输完。
回复 使用道具 举报
scanf用%c一定要小心,%c是接收空白字符的,这和%d,%s不一样。具体可看我的帖子:http://bbs.itheima.com/thread-126929-1-1.html

看完后你就会明白,把第13行改为scanf(" %c", &d); 就可以了,注意引号和%c之间有一个空格
回复 使用道具 举报
丶白菜你个小番 发表于 2014-7-6 22:39
因为你的回车就是一个字符。你可以把代码改成

恩 我知道 就是想用回车符来实现那个,的功能
回复 使用道具 举报
你的意思是第一个程序里面无法读入第二个字母嘛?
回复 使用道具 举报
因为你的回车就是一个字符。你可以把代码改成
  1. printf("请输入两个字符,并以逗号隔开:");
  2. scanf("%c,%c",&c,&d);
  3. printf("第一个输入的字符是:%c;第二个输入的字符是:%c",c,d);
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马