我写过这个C程序:
main()
{
int i,k;
char a[]="ilovefootbalonly\n";
printf("enter 1 or 2\n");
scanf("%d",&k);
switch(k)
{
case'1':for(i=0;i<=16;i++)
{
i+=1;
printf("%-16.*s\n",i,a);
}
break;
case'2':for(i=16;i>=0;i--)
{
i+=1;
printf("%*.*s\n",16,i,a);
}
break;
}
}
在我输入1后,我预计我的输出会是这样的:
i
il
ilo
ilov
.
.
.
.
ilovefootbal
即使我的程序编译没有错误,但是当我运行它时,在我输入1
或2
之后,它会停在那里,那么我在哪里犯了任何错误?
我是堆叠溢出和C的新手,所以如果您在发布此类问题时可以原谅任何小错误,我将不胜感激。
答案 0 :(得分:1)
您的案例标签不正确。您的意思是1和2,而不是'1'
和'2'
。后者是字符文字(数值为49和50)。
此外,由于“足球”的拼写错误,您的字符串实际上由16个字符(加上终结符)组成。要么修复它,要么将循环运行到15而不是16。
另一件事是,案例2中的循环永远不会终止:i--
将取消循环体中的i += 1
。与此类似,案例1将以预期频率的两倍运行索引。
并考虑使用int main()
作为函数原型。
答案 1 :(得分:1)
程序停止,因为它到达程序结束。更改&#34;案例&#39; 1&#39;:&#34;到case 1:
和case '2':
到case 2:
,然后它应该跳到案例1或2.此外,你正在增加我两次。首先是for(i=0;i<=16;i++){
和i+=1;
。我不确定这种行为是否正确; - )。