夜雨de街灯 发表于 2016-3-4 16:29:53

循环语句的问题

我想写一个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
  



输不出来,一个死循环

人造人 发表于 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;
}

夜雨de街灯 发表于 2016-3-4 17:32:04

人造人 发表于 2016-3-4 17:26
你看这样行吗?

有错误{:10_266:}

人造人 发表于 2016-3-4 17:33:15

夜雨de街灯 发表于 2016-3-4 17:32
有错误

看看错误信息

夜雨de街灯 发表于 2016-3-4 18:10:05

人造人 发表于 2016-3-4 17:33
看看错误信息

我想竖着顺下来,不是打横{:10_245:}

人造人 发表于 2016-3-4 18:33:17

夜雨de街灯 发表于 2016-3-4 18:10
我想竖着顺下来,不是打横

不明白,可否说清楚点?

人造人 发表于 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;
}

夜雨de街灯 发表于 2016-3-4 18:50:05

人造人 发表于 2016-3-4 18:36
这样吗?

等等试试,现在不在家,先谢谢你先啦!!

满满 发表于 2016-3-4 20:39:38

把 chara, b;   换成inta, b;

满满 发表于 2016-3-4 20:42:37

还有   for(b=a; b<=a+72; b+24)//4列   换成for ( b=a; b<=a+72; b=b+24)

夜雨de街灯 发表于 2016-3-4 23:09:34

人造人 发表于 2016-3-4 18:36
这样吗?

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

夜雨de街灯 发表于 2016-3-4 23:12:17

满满 发表于 2016-3-4 20:42
还有   for(b=a; b

非常谢谢,解决了{:10_257:}

夜雨de街灯 发表于 2016-3-4 23:13:02

满满 发表于 2016-3-4 20:39
把 chara, b;   换成inta, b;

为什么用char类型不行啊{:9_241:}

满满 发表于 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,超出了有符号的字符的占用的空间,造成数据溢出 */

夜雨de街灯 发表于 2016-3-5 16:34:19

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

感谢你的回答{:10_257:}

夜雨de街灯 发表于 2016-3-5 17:02:20

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

之前一直以为char是有无符号的{:10_245:}
页: [1]
查看完整版本: 循环语句的问题