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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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中混合输入的问题!

7 个回复

倒序浏览
这个更有意思一点。
回复 使用道具 举报
6666666666
回复 使用道具 举报
666666666666666
回复 使用道具 举报

{:2_36:}{:2_36:}{:2_36:}
回复 使用道具 举报

{:2_36:}{:2_36:}{:2_36:}
回复 使用道具 举报
支持一下!
回复 使用道具 举报

{:2_36:}谢谢!!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马