第五章的最后一题,这样写为何执行不完??
#include"stdio.h"void main()
{
int i, p=4,w; //W用于接收密码,与P对比
char a; //存放原文
printf("input 10 char: \n");
for(i=0;i<10;i++)
{
scanf("%c",&a);
}
printf("input yr pw: \n");
scanf("%d",&w);
if(w==p)
{
for(i=0;i<10;i++)
{printf("%c",a);} //当W=4时,程序调试到此正常;
}
else{printf("%c",a+4);} //当W != 4时,这一步却没有被执行,就结束了程序,跪求详解{:7_154:}十分感激^^
} 本帖最后由 无念道长 于 2014-2-19 09:08 编辑
2L说的对,你的数组定义的时候是a,可是序号是0~9,不是1~10,所以a是不存在的,而读取数组元素的时候会读取*(a+10)的内容,*(a+10)的内容不可知,所以*(a+10)+4的内容会打印的很奇怪,我测试了你的程序,输入的原文是"abcdefghij",预期打印应该是"j+4"="n",可是打印的是很奇怪的字符,当我把程序换成这样:#include"stdio.h"
void main()
{
int i, p=4,w; //W用于接收密码,与P对比
char a; //存放原文
printf("input 10 char: \n");
for(i=0;i<10;i++)
{
scanf("%c",&a);
}
printf("input yr pw: \n");
scanf("%d",&w);
if(w==p)
{
for(i=0;i<10;i++)
{
printf("%c",a);
} //当W=4时,程序调试到此正常;
}
else
{
printf("%c\n",a+4);
} //当W != 4时,最后一位后的4位ASCII码对应的值
}可以正常输出"n"
至于执行不完,不知道楼主什么意思,上述程序和你的程序已经通过VC++6.0测试
执行了啊,但是你printf("%c",a+4); 这时候i的值是10 ,a+4的东西是不可预期的,当然打印不出了,不信你可以把这句的%c换成%d看看能不能打印出数字 路过看看= =! machimilk 发表于 2014-2-19 02:14 static/image/common/back.gif
执行了啊,但是你printf("%c",a+4); 这时候i的值是10 ,a+4的东西是不可预期的,当然打印不出了,不信你 ...
{:7_166:}
当改成"%d",运行结果打印出48.... 无念道长 发表于 2014-2-18 23:33 static/image/common/back.gif
2L说的对,你的数组定义的时候是a,可是序号是0~9,不是1~10,所以a是不存在的,而读取数组元素的时 ...
非常感谢,又学到了,嘻
我把最后那部份改成这样:
if(w==p)
{
for(i=0;i<10;i++)
{printf("%c",a);}
}
else
{
for(i=0;i<10;i++)
{printf("%c",a+4);}
}
结果正是我想要的,哈哈!! 欣欣celin 发表于 2014-2-22 22:07 static/image/common/back.gif
非常感谢,又学到了,嘻
我把最后那部份改成这样:
if(w==p)
刚刚发现,这样改:
else
{
for(i=0;i<9;i++)
{printf("%c",a+4);}
}
更完美,嘻嘻{:7_183:}
页:
[1]