鱼C论坛

 找回密码
 立即注册
查看: 1740|回复: 15

循环语句的问题

[复制链接]
发表于 2016-3-4 16:29:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我想写一个ascii码表的一部分,用for循环语句写,但是不知道为什么无限循环,我水平低刚开始学,看不出来,麻烦大家帮忙看看!!!
#include <stdio.h>
void main(void)
{
        char a , b;
        for(a=33;a<=56;a++)  //24行
        {
                for(b=a;b<=a+72;b+24)  //4列
                {
                        printf("%c %d\t",b ,b);  //输出字符和对应的数字
                }
        printf("\n");  //换行
        }
}

因为余了两个格所以最后两个肯定是乱码...
  33
  
  !
  
  57
  
  9
  
  81
  
  Q
  
  105
  
  i
  
  34
  
  "
  
  58
  
  :
  
  82
  
  R
  
  106
  
  j
  
  35
  
  #
  
  59
  
  ;
  
  83
  
  S
  
  107
  
  k
  
  36
  
  $
  
  60
  
  <
  
  84
  
  T
  
  108
  
  l
  
  37
  
  %
  
  61
  
  =
  
  85
  
  U
  
  109
  
  m
  
  38
  
  &
  
  62
  
  >
  
  86
  
  V
  
  110
  
  n
  
  39
  
  `
  
  63
  
  ?
  
  87
  
  W
  
  111
  
  o
  
  40
  
  (
  
  64
  
  @
  
  88
  
  X
  
  112
  
  p
  
  41
  
  )
  
  65
  
  A
  
  89
  
  Y
  
  113
  
  q
  
  42
  
  *
  
  66
  
  B
  
  90
  
  Z
  
  114
  
  r
  
  43
  
  +
  
  67
  
  C
  
  91
  
  [
  
  115
  
  s
  
  44
  
  ,
  
  68
  
  D
  
  92
  
  \
  
  116
  
  t
  
  45
  
  -
  
  69
  
  E
  
  93
  
  ]
  
  117
  
  u
  
  46
  
  .
  
  70
  
  F
  
  94
  
  ^
  
  118
  
  v
  
  47
  
  /
  
  71
  
  G
  
  95
  
  _
  
  119
  
  w
  
  48
  
  0
  
  72
  
  H
  
  96
  
  '
  
  120
  
  x
  
  49
  
  1
  
  73
  
  I
  
  97
  
  a
  
  121
  
  y
  
  50
  
  2
  
  74
  
  J
  
  98
  
  b
  
  122
  
  z
  
  51
  
  3
  
  75
  
  K
  
  99
  
  c
  
  123
  
  {
  
  52
  
  4
  
  76
  
  L
  
  100
  
  d
  
  124
  
  |
  
  53
  
  5
  
  77
  
  M
  
  101
  
  e
  
  125
  
  }
  
  54
  
  6
  
  78
  
  N
  
  102
  
  f
  
  126
  
  ~
  
  55
  
  7
  
  79
  
  O
  
  103
  
  g
  
  
  56
  
  8
  
  80
  
  P
  
  104
  
  h
  
  



输不出来,一个死循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-3-4 17:26:16 | 显示全部楼层
你看这样行吗?
#include <stdio.h>

int main ()
{
        char ch;
        
        for (ch = 0x20; ch <= 0x7E; ch++)
        {
                
                printf ("%c %d\t", ch, ch);
        }
        
        return 0;
}

评分

参与人数 1荣誉 +3 鱼币 +5 收起 理由
~风介~ + 3 + 5 支持楼主!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-4 17:32:04 | 显示全部楼层

有错误
QQ图片20160304173228.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-4 17:33:15 | 显示全部楼层

看看错误信息
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-4 18:10:05 From FishC Mobile | 显示全部楼层
人造人 发表于 2016-3-4 17:33
看看错误信息

我想竖着顺下来,不是打横
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-4 18:33:17 | 显示全部楼层
夜雨de街灯 发表于 2016-3-4 18:10
我想竖着顺下来,不是打横

不明白,可否说清楚点?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-4 18:36:00 | 显示全部楼层
夜雨de街灯 发表于 2016-3-4 18:10
我想竖着顺下来,不是打横

这样吗?
#include <stdio.h>

int main ()
{
        char ch;
        
        for (ch = 0x20; ch <= 0x7E; ch++)
        {
                
                printf ("%c %d\t", ch, ch);
                if (ch % 4 == 0)
                {
                        printf ("\n");
                }
        }
        
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-4 18:50:05 From FishC Mobile | 显示全部楼层
人造人 发表于 2016-3-4 18:36
这样吗?

等等试试,现在不在家,先谢谢你先啦!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-4 20:39:38 | 显示全部楼层
把 char  a, b;   换成  int  a, b;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-4 20:42:37 | 显示全部楼层
还有   for(b=a; b<=a+72; b+24)  //4列   换成  for ( b=a; b<=a+72; b=b+24)

评分

参与人数 1荣誉 +3 鱼币 +5 收起 理由
~风介~ + 3 + 5 感谢楼主无私奉献!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-4 23:09:34 | 显示全部楼层

顺序还是打横过的,九楼解决了我的问题,不过还是要谢谢你

打横的

打横的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-4 23:12:17 | 显示全部楼层
满满 发表于 2016-3-4 20:42
还有   for(b=a; b

非常谢谢,解决了
QQ截图20160304231116.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-4 23:13:02 | 显示全部楼层
满满 发表于 2016-3-4 20:39
把 char  a, b;   换成  int  a, b;

为什么用char类型不行啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-5 08:20:17 | 显示全部楼层
夜雨de街灯 发表于 2016-3-4 23:13
为什么用char类型不行啊

因为 char 占一个字节的空间  还是有符号的 在 for 循环中超出储存范围  你也可以用unsigned char  使用本次案列  但我认为最好使用 int 型  占四个字节
#include <stdio.h>

//此函数属于数据溢出,超出了字符空间的范围
void main(void)
{
        char a , b;
        for(a=33;a<=56;a++)  //24行
        {
                for(b=a;b<=a+72;b=b+24)  //4列
                {
                        printf("%c %d\t",b ,b);  //输出字符和对应的数字
//                        if (b==33+24+24)  //调试循环体内的循环是否能运行
//                                goto L;   //最好使用goto,跳出循环
                }
                if (a==34)   //调试循环体内的循环的次数,在使用本次调试多出了很多几个无用的数
                        break;
                printf("\n");  //换行
        }
L:        printf ("程序执行完毕!");  //调试语句
}
/*仔细分析一下,当b=105时,继续循环,然后 b=b+24=129,超出了有符号的字符的占用的空间,造成数据溢出 */
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-5 16:34:19 | 显示全部楼层
满满 发表于 2016-3-5 08:20
因为 char 占一个字节的空间  还是有符号的 在 for 循环中超出储存范围  你也可以用unsigned char  使用 ...

感谢你的回答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-5 17:02:20 | 显示全部楼层
满满 发表于 2016-3-5 08:20
因为 char 占一个字节的空间  还是有符号的 在 for 循环中超出储存范围  你也可以用unsigned char  使用 ...

之前一直以为char是有无符号的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-26 20:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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