我的程序有什么错误?
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
即使我的程序编译没有错误,但是当我运行它时,在我输入1
或2
后,它就停在那里,那么我在哪里犯错了?
我是堆栈溢出和 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;
中。我不确定这种行为是否正确 ;-).
我写了这个 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 的新手,所以如果您在发布此类问题时出现任何小错误,我将不胜感激。
您的案例标签不正确。你指的是 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;
中。我不确定这种行为是否正确 ;-).