我的计划中的错误是什么?

时间:2016-02-22 15:10:06

标签: c logic

我写过这个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

即使我的程序编译没有错误,但是当我运行它时,在我输入12之后,它会停在那里,那么我在哪里犯了任何错误?

我是堆叠溢出和C的新手,所以如果您在发布此类问题时可以原谅任何小错误,我将不胜感激。

2 个答案:

答案 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;。我不确定这种行为是否正确; - )。