黑马程序员技术交流社区

标题: scanf函数使用中的细节探究2(在视频材料的基础上进行了拓展) [打印本页]

作者: liulunjiang    时间: 2015-10-23 23:29
标题: scanf函数使用中的细节探究2(在视频材料的基础上进行了拓展)
6. 接受混合了字符型变量的多变量值时的问题。
  1. #include <stdio.h>
  2. int main(int argc, const char * argv[]) {
  3.     int a=-1,b=-2;
  4.     char ch;
  5.     scanf("%d%c%d",&a,&ch,&b);
  6. printf("%d,%c,%d\n",a,ch,b);
  7. return 0;
  8. }
复制代码

运行情况:
5 a 9
5, ,-2
Program ended with exit code: 0
解析:
输入5时被变量a获取,所以a为5;输入空格被变量ch获取,所以ch为空格;输入a时,本应由b接收,但b是int型而输入的是字符型,b无法接收,保持原值,所以b仍为-2。
要解决该问题,可按如下方法。
  1. #include <stdio.h>
  2. int main(int argc, const char * argv[]) {
  3.     int a=-1,b=-2;
  4.     char ch;
  5.     scanf("%d,%c,%d",&a,&ch,&b);//在scanf函数中加入逗号隔开
  6. printf("%d,%c,%d\n",a,ch,b);
  7. return 0;
  8. }
复制代码

运行情况:
5,a,9//用户在输入时也必须加上逗号
5,a,9
Program ended with exit code: 0
当然除了逗号外,其它字符也可以,举例如下。
  1. #include <stdio.h>
  2. int main(int argc, const char * argv[]) {
  3.     int a=-1,b=-2;
  4.     char ch;
  5.     scanf("%d-%cw%d",&a,&ch,&b);//用-和w分隔开
  6. printf("%d,%c,%d\n",a,ch,b);
  7. return 0;
  8. }
复制代码

运行情况:
5-aw9//输入时保持格式的一致性,也用-和w分隔开
5,a,9
Program ended with exit code: 0

7. 用%*可以忽略一个变量的输入。
  1. #include <stdio.h>
  2. int main(int argc, const char * argv[]) {
  3.     int a=-1,b=-2;
  4.     char ch;
  5.     scanf("%d%*c%c%d",&a,&ch,&b);//%*c跳过一个字符
  6. printf("%d,%c,%d\n",a,ch,b);
  7. return 0;
  8. }
复制代码

运行情况:
4 a 9
4,a,9
Program ended with exit code: 0
解析
当输入第一个空格时,该空格被跳过,未被变量ch接收,所以ch接收的是a,第二个空格属于本文5中的情况,会被忽略,所以变量b接收的是9。
*用此方法也解决了本文6中混合输入的问题!

作者: liulunjiang    时间: 2015-10-24 09:36
这个更有意思一点。
作者: LPz1994    时间: 2015-10-25 23:00
6666666666
作者: jy00889669    时间: 2015-10-25 23:51
666666666666666

作者: liulunjiang    时间: 2015-10-26 09:05
LPz1994 发表于 2015-10-25 23:00
6666666666

{:2_36:}{:2_36:}{:2_36:}
作者: liulunjiang    时间: 2015-10-26 09:07
jy00889669 发表于 2015-10-25 23:51
666666666666666

{:2_36:}{:2_36:}{:2_36:}
作者: liulunjiang    时间: 2015-10-29 07:50
gabriel2016 发表于 2015-10-26 10:43
支持一下!

{:2_36:}谢谢!!!!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2