一个C程序的问题!

来源:百度知道 编辑:UC知道 时间:2024/06/28 11:03:10
# include "stdio.h"
void main()
{
char k;
int i;
for(i=0;i<3;i++)
{
scanf("%c",&k);/*当我输入12时 k的值是多少,为什么?结果又是什么,为什么 谢谢*/
switch(k)
{
case'1':printf("one\n");
case'2':printf("two\n");
}
}
}

也就是说你输入的字符如果是小于等于三个的话,就分别第一个,第二个,第三个赋给了k,如果大于的话,后面的也不起作用的,你也应该明白了,是一个字符一个字符的读进去的.
所以k是字符1,2但是对应的整型数字已经是49,50了
结果
one
two
two
你可以用下面的方法验证的
# include "stdio.h"
void main()
{
char k;
int i;
for(i=0;i<3;i++)
{
scanf("%c",&k);/*当我输入12时 k的值是多少,为什么?结果又是什么,为什么 谢谢*/
printf("k(%)=%c,%d\n",i,k,k);
switch(k)
{
case'1':printf("one\n");
case'2':printf("two\n");
}
}
}看看结果就会明白了!

scanf("%c",&k);/*输入12就取1不取2 1字符码是多少k就是多少*/

是啊!
scanf的读取方式就是一个一个字符读的!
不读字符串的!

scanf("%c",&k);/*当我输入12时 k的值是多少,为什么?结果又是什么,为什么 谢谢*/

当你输入"12"时 程序认为你输入了字符串"12",而不是数值12,而scanf("%c"是取一个字节,即取输入的"12"中的第一个字节'1',所以当你输入12时,k中获得的是1,最终的结果因为k是1所以当然是输出
‘one’了!
还有什么问题 短消息联系我!

输入12的话,k=1;
输出为
one
two<