我想用这段代码来打印字母之间的所有可能组合,**包括单个字母。**我是从CS50x课程(第2周-破解)中编写程序的这一部分的
我包括使用'\0'
来获得单个字母。一切正常,直到开始使用大写字母为止,之后每两个循环将跳过'\0'
。结果是我丢失了单个大写字母的一半,而且我不知道为什么这样做。
这是我得到的结果的一部分(这部分是正确的,注意单个字母'g','h','i'都已打印):
Blockquote fZ g ga gb gc gd ge gf gg gh gi gj gk gl gm gn go gp gq gr gs gt gu gv gw gx gy gz gA gB gC gD gE gF gG gH gI gJ gK gL gM gN gO gP gQ gR gS gT gU gV gW gX gY gZ gY gZ h ha hb hc hd he hf hg hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz hA hB hC hD hE hF hG hH hI hJ hK hL hM hN hO hP hQ hR hS hT hU hV hW hX hY hZ i 即时
但是过一会儿它开始跳过字母(打印“ W”和“ Y”,但不打印“ X”)
Blockquote VZ W Wa Wb Wc Wd We Wf Wg Wh Wi Wj Wk Wl Wm Wn Wo Wp Wq Wr Ws Wt Wu Wv Ww Wx Wy Wz WA WB WC WD WE WF WG WH WI WJ WK WL WM WN WO WP WQ WR WS WT WU WV WW WX WY WZ Xa Xb Xc Xd Xe Xf Xg Xh Xi Xj Xk Xl Xm Xn Xo Xp Xq Xr Xs Xt Xu Xv Xw Xx Xy Xz XA XB XC XD XE XF XG XH XI XJ XK XK XL XM XN XO XP XQ XR XS XT XU XV XW XX XY XZ Y < / strong>是
这是原始代码:
int main(void)
{
char abc[52] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
char xyz[3];
char null = '\0';
for (int i = 0; i < 52; i++)
{
xyz[0] = abc[i];
xyz[1] = null;
printf("%s ", xyz);
for (int j = 0; j < 52; j++)
{
xyz[1] = abc[j];
printf("%s ", xyz);
}
}
printf("\n");
}'''
答案 0 :(得分:1)
使用
xyz[1] = abc[j];
您将覆盖刚刚设置的空终止符。
更好地将整个数组初始化为零(空终止符)
char xyz[3] = { '\0' };
然后,您无需为内循环第二次显式设置空终止符。
答案 1 :(得分:0)
好的,所以我继续学习课程的下一周,他们介绍了一个IDE,我曾经尝试过。正如@Weather Vane指出的那样,它这次完美运行。因此,我认为代码不是完全错误的,只是在某种程度上,我之前在其上编译和运行程序的沙箱可能是问题所在。感谢所有发布者!