鱼C论坛

 找回密码
 立即注册
查看: 2616|回复: 6

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

[复制链接]
发表于 2014-2-18 23:33:41 | 显示全部楼层 |阅读模式
10鱼币
#include"stdio.h"
void main()
{
     int i, p=4,w;   //W用于接收密码,与P对比
     char a[10];     //存放原文
     printf("input 10 char: \n");
    for(i=0;i<10;i++)
    {
        scanf("%c",&a[i]);
    }
   printf("input yr pw: \n");
   scanf("%d",&w);
   if(w==p)
  {
     for(i=0;i<10;i++)
    {printf("%c",a[i]);}        //当W=4时,程序调试到此正常;  
   }
   else{printf("%c",a[i]+4);}   //当W != 4时,这一步却没有被执行,就结束了程序,跪求详解{:7_154:}十分感激^^
}

最佳答案

查看完整内容

2L说的对,你的数组定义的时候是a[10],可是序号是0~9,不是1~10,所以a[10]是不存在的,而读取数组元素的时候会读取*(a+10)的内容,*(a+10)的内容不可知,所以*(a+10)+4的内容会打印的很奇怪,我测试了你的程序,输入的原文是"abcdefghij",预期打印应该是"j+4"="n",可是打印的是很奇怪的字符,当我把程序换成这样:可以正常输出"n" 至于执行不完,不知道楼主什么意思,上述程序和你的程序已经通过VC++6.0测试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-18 23:33:42 | 显示全部楼层
本帖最后由 无念道长 于 2014-2-19 09:08 编辑

2L说的对,你的数组定义的时候是a[10],可是序号是0~9,不是1~10,所以a[10]是不存在的,而读取数组元素的时候会读取*(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[10];     //存放原文
     printf("input 10 char: \n");
    for(i=0;i<10;i++)
    {
        scanf("%c",&a[i]);
    }
   printf("input yr pw: \n");
   scanf("%d",&w);
   if(w==p)
   {
     for(i=0;i<10;i++)
     {
                 printf("%c",a[i]);
         }        //当W=4时,程序调试到此正常;  
   }
   else
   {
           printf("%c\n",a[i-1]+4);
   }   //当W != 4时,最后一位后的4位ASCII码对应的值
}
可以正常输出"n"
至于执行不完,不知道楼主什么意思,上述程序和你的程序已经通过VC++6.0测试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-19 02:14:18 | 显示全部楼层
执行了啊,但是你printf("%c",a[i]+4); 这时候i的值是10 ,a[10]+4的东西是不可预期的,当然打印不出了,不信你可以把这句的%c换成%d看看能不能打印出数字
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-19 09:40:56 | 显示全部楼层
路过看看= =!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-2-22 21:51:13 | 显示全部楼层

{:7_166:}
当改成"%d",运行结果打印出48....
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-2-22 22:07:50 | 显示全部楼层
无念道长 发表于 2014-2-18 23:33
2L说的对,你的数组定义的时候是a[10],可是序号是0~9,不是1~10,所以a[10]是不存在的,而读取数组元素的时 ...

非常感谢,又学到了,嘻
我把最后那部份改成这样:
if(w==p)
        {
                for(i=0;i<10;i++)
                {printf("%c",a);}          
        }
        else
        {
                for(i=0;i<10;i++)
                {printf("%c",a[i-1]+4);}
        }
结果正是我想要的,哈哈!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-2-22 22:17:28 | 显示全部楼层
欣欣celin 发表于 2014-2-22 22:07
非常感谢,又学到了,嘻
我把最后那部份改成这样:
if(w==p)

刚刚发现,这样改:
else
        {
                for(i=0;i<9;i++)
                {printf("%c",a+4);}
        }

更完美,嘻嘻{:7_183:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-11 03:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表