6. 接受混合了字符型变量的多变量值时的问题。
- #include <stdio.h>
- int main(int argc, const char * argv[]) {
- int a=-1,b=-2;
- char ch;
- scanf("%d%c%d",&a,&ch,&b);
- printf("%d,%c,%d\n",a,ch,b);
- return 0;
- }
复制代码
运行情况:
5 a 9
5, ,-2
Program ended with exit code: 0
解析:
输入5时被变量a获取,所以a为5;输入空格被变量ch获取,所以ch为空格;输入a时,本应由b接收,但b是int型而输入的是字符型,b无法接收,保持原值,所以b仍为-2。
要解决该问题,可按如下方法。
- #include <stdio.h>
- int main(int argc, const char * argv[]) {
- int a=-1,b=-2;
- char ch;
- scanf("%d,%c,%d",&a,&ch,&b);//在scanf函数中加入逗号隔开
- printf("%d,%c,%d\n",a,ch,b);
- return 0;
- }
复制代码
运行情况:
5,a,9//用户在输入时也必须加上逗号
5,a,9
Program ended with exit code: 0
当然除了逗号外,其它字符也可以,举例如下。
- #include <stdio.h>
- int main(int argc, const char * argv[]) {
- int a=-1,b=-2;
- char ch;
- scanf("%d-%cw%d",&a,&ch,&b);//用-和w分隔开
- printf("%d,%c,%d\n",a,ch,b);
- return 0;
- }
复制代码
运行情况:
5-aw9//输入时保持格式的一致性,也用-和w分隔开
5,a,9
Program ended with exit code: 0
7. 用%*可以忽略一个变量的输入。
- #include <stdio.h>
- int main(int argc, const char * argv[]) {
- int a=-1,b=-2;
- char ch;
- scanf("%d%*c%c%d",&a,&ch,&b);//%*c跳过一个字符
- printf("%d,%c,%d\n",a,ch,b);
- return 0;
- }
复制代码
运行情况:
4 a 9
4,a,9
Program ended with exit code: 0
解析
当输入第一个空格时,该空格被跳过,未被变量ch接收,所以ch接收的是a,第二个空格属于本文5中的情况,会被忽略,所以变量b接收的是9。
*用此方法也解决了本文6中混合输入的问题!
|
|