C语言强制类型转换后两次输出数组不一样

# include <stdio.h>

void main()
{
int i=0;
int m[20];
unsigned char Plai[2]={'2','7'};
unsigned char Plain[200];
unsigned char y;
for (int k=0;k<2;k++)
{
i=0;
y=char(Plai[k]/10)+ '0';

Plain[i]=y;
printf("%c",Plain[i]);
y=char(Plai[k]%10)+ '0';

Plain[i+1]=y;
printf("%c",Plain[i+1]);
i=i+2;

if(k==1)
{printf("\n");
for (i=0;i<4;i++)
{
printf("%c",Plain[i]);
}
}
}

}

为什么第2次的输出和第一次的不一样??!!急急急。。。求解答

第1个回答  2013-08-11
就你写的代码,第一次输出结果为 5 0 第二次输入结果为5 5 。。。
你的Plain数组中有效值只有Plain[0]和Plain[1],请理解/和%的区别,以及C对待字符是当做整数对待的可以查看ASC码表,输出的结果不同主要是因为/和%,第二次for循环
y=char(Plai[k]%10)+ '0';//k=1 plai[1]=='7'==55 Plai[k]%10==5!!
Plain[i+1]=y;
printf("%c",Plain[i+1]);追问

上面楼的说的对。。是for中的i=0出错了。。谢谢啦

第2个回答  2013-08-11
#include <stdio.h>

void main()
{
int i=0;
    //int  m[20];
    unsigned char Plai[2]={'2','7'};  
unsigned char Plain[200];  
unsigned char y;

for (int k=0;k<2;k++)
 {
//i=0;   错在这里
y=char(Plai[k]/10)+ '0';

Plain[i]=y;
printf("%c",Plain[i]);

y=char(Plai[k]%10)+ '0';

Plain[i+1]=y;
printf("%c",Plain[i+1]);

i=i+2; 
 
if(k==1)
{
printf("\n");
for (i=0;i<4;i++)
{
printf("%c",Plain[i]);

printf("\n");

}
}

本回答被提问者采纳

c语言指针问题。。为什么两种方法输出来的结果不一样。。
sort 内部指针w所指数组a是 局部变量 ,意味着a的数据是在栈上分配的 那a的地址传递给w由w返回到外界main中赋值给p,此时p所指的内容是无意义数据(sort的局部变量)C语言实现本质上局部变量失效时并不会清空,但是可以被访问,这也是为什么第一位数据输出的是对的 但是输出第二位的时候,代码需要调...

C语言为什么两种办法输出的地址不一样
第一个printf("%p\\n",*p+i);,p前面多了个星号,*p等于1,结果是 1+i,如果要显示地址p前面不要加星号

如图,C语言输出的原数组显示为什么与输入的值不同啊?
第一个printf里的输出的内容不对 printf("%7d",a[i]);你要输出的是数组元素,不是元素的地址

C语言中如何把数组强制类型转换
在C语言中,若要将数组进行强制类型转换,关键在于明确定义数组元素的类型。例如,定义了两个数组a和b,分别作为字符数组和整型数组。通过循环赋值,可以将字符数组a的元素复制至整型数组b中。具体实现如下:首先,定义字符数组a和整型数组b,均为长度为10的数组。接着,使用for循环对数组元素进行赋值操作。

Windows内部怎么处理强制类型转换和数组越界问题???
3. 特殊值。当指数域的8个二进制数字为全1时即为这种情况。当小数域为全零时,该float值根据符号位的不同表示正无穷或者负无穷;当小数域为非全零时,该float值为NaN(Not a Number)。以上,只是在C语言中对int和float的规约。具体在代码中执行强制类型转化究竟会发生什么?从下面两句很简单的语句...

这段C语言那里错了,读入的数据打印出来不一样
for (i=0;i<N;i++) { \/\/屏幕输入数据后,按回车键,会产生回车符'\\n', \/\/而函数scanf("%c",&p[i].color)会意外地吸收了回车符, \/\/导致p[i].color的数值是回车符,所以最后输出的数据是错误的. \/\/修改方案: getchar(); \/\/增加这个语句,用于吸收回车符 scanf(...

c语言的数组是如何进行强制转换的?
1.类型说明符和表达式都必须加括号(单个变量可以不加括号),如把(int)(x+y)写成(int)x+y则成了把x转换成int型之后再与y相加了。2.无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的数据长度进行的临时性转换,而不改变数据说明时对该变量定义的类型。(int)(x)%2和(int)x%...

C语言中强制类型转换运算符的优先级是?
位于第二级,结合方式为自有向左。比它优先级大的是最顶级优先级,包括:数组下标‘[]’、函数调用操作符‘()’、和各结构成员选择操作符‘.’ 。

c语言 将用户输入字符串转化2进制并输出
第一步:用强制类型转换成int或者long 第二步,这时候有2种方法 ①.使用位移操作符“<<”和“>>”,这个就很简单了,总共要移动的次数 = sizof(int或者long) * 8;移位的时候做个判断,移出来是‘1’就输出1,否则输出0;这种方法适合于很大的数字。要注意高位有时候是无意义的0.不用输出 ②...

long数组通过指针强制转换为char数组 c语言程序问题!
1、显式强制类型转换 显式强制类型转换需要使用强制类型转换运算符,格式如下:type(<expression>)或 (type)<expression> 其中,type为类型描述符,如int,float等。<expression>为表达式。经强制类型转换运算符运算后,返回一个具有type类型的数值,这种强制类型转换操作并不改变操作数本身,运算后操作...

相似回答