私はこの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'
。後者は文字リテラル(49と50の数値を持つ)です。
また、「football」のタイプミスにより、文字列は実際には16文字(およびターミネータ)で構成されています。それを修正するか、ループを16ではなく15に実行します。
もう1つは、ケース2のループが終了しないことです。は、ループ本体のi--
をキャンセルi += 1
します。同様に、ケース1は、意図した頻度の2倍でインデックスを通過します。
そしてint main()
、関数プロトタイプとして使用することを検討してください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加