我的程序有什么错误?

What's the error in my program?

我写了这个 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 的新手,所以如果您在发布此类问题时出现任何小错误,我将不胜感激。

您的案例标签不正确。你指的是 1 和 2,而不是 '1''2'。后者是 character 文字(数值为 49 和 50)。

此外,由于 "football" 的拼写错误,您的字符串实际上包含 16 个字符(加上一个终止符)。要么解决这个问题,要么 运行 你的循环到 15 而不是 16.

另一件事是,情况 2 中的循环将永远不会终止:i-- 将取消循环体中的 i += 1。同样,案例 1 将 运行 以两倍于预期的频率通过索引。

并考虑使用 int main() 作为函数原型。

程序停止,因为它到达程序末尾。将 "case '1':" 更改为 case 1: 并将 case '2': 更改为 case 2:,然后它应该跳转到情况 1 或 2。此外,您将 i 增加了两次。首先在 for(i=0;i<=16;i++){i+=1; 中。我不确定这种行为是否正确 ;-).