欣欣celin 发表于 2014-2-18 23:33:41

第五章的最后一题,这样写为何执行不完??

#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-18 23:33:42

本帖最后由 无念道长 于 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测试

machimilk 发表于 2014-2-19 02:14:18

执行了啊,但是你printf("%c",a+4); 这时候i的值是10 ,a+4的东西是不可预期的,当然打印不出了,不信你可以把这句的%c换成%d看看能不能打印出数字

未闻丶花名 发表于 2014-2-19 09:40:56

路过看看= =!

欣欣celin 发表于 2014-2-22 21:51:13

machimilk 发表于 2014-2-19 02:14 static/image/common/back.gif
执行了啊,但是你printf("%c",a+4); 这时候i的值是10 ,a+4的东西是不可预期的,当然打印不出了,不信你 ...

{:7_166:}
当改成"%d",运行结果打印出48....

欣欣celin 发表于 2014-2-22 22:07:50

无念道长 发表于 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:17:28

欣欣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]
查看完整版本: 第五章的最后一题,这样写为何执行不完??