「ユーザーが最大 20 個の整数を入力できるようにする C プログラムを作成する (センチネル値に基づいて、または 20 個の整数制限に達したことに基づいて、数値の受け入れを停止します)」という課題があります。その後、プログラムは数値を表示する必要があります。エントリーの逆順です。」
センチネル値を "EOF" (または CTRL+D / CRTL+Z) にすることにしました。私のコードには、いくつかの非常に不安定な動作があります。
- EOF キーを 2 回押す必要があります (これにより、配列にカウントされる空白のエントリも作成されます。
- 最初のエントリの最初の桁が切り捨てられます。
他のすべては正常に動作しているように見えますが、これは明らかに望ましい結果ではありません。以下は私のコードです。何が悪いのか説明できますか?
main() {
int i,iMax;
double dblMean;
int x[MAX];
printf("Please Enter Up to 20 Integers\n");
for (i=0; i<MAX; i++)
{
printf("%d.> ",i+1);
if (getchar() == EOF) /* Check for CTRL+D OR CTRL+Z */
break; /* Exit loop if EOF entered :: Must be pressed twice and eats first character of first entry */
scanf("%d",&x[i]);
iMax=i;
}
printf("\nYou entered %d numbers\n",iMax+1); /* Should be i+1 but EOF had to be entered twice */
printf("\nIndex Item Reverse Item\n");
for (i=0; i<=iMax; i++)
printf("%3d%4c%8d%9c%11d\n",i,' ',x[i],' ',x[iMax-i]);
return 0;
}
編集済み:これが私の最終的なコードです。ご協力いただきありがとうございます:
#include <stdio.h>
#include <stdlib.h>
#define MAX 20
int main()
{
int i,iMax;
int x[MAX];
printf("Please Enter Up to 20 Integers\n");
for (i=0; i<MAX; i++)
{
printf("%d.> ",i+1);
if (scanf("%d",&x[i]) != 1) /* Checks for CTRL+D OR CTRL+Z */
break; /* EOF returns -1 and loop will be exited */
iMax=i; /* iMax must be set for second loop to exit properly */
/* Can sizeof x be used instead for second loop? */
}
printf("\nYou entered %d numbers\n",iMax+1); /* Displays number of items entered... Will be <= MAX*/
printf("\nIndex Item Reverse Item\n");
for (i=0; i<=iMax; i++) /* Why wont 'for (i=0; i<=sizeof x; i++)' work? */
printf("%3d%4c%8d%9c%11d\n",i,' ',x[i],' ',x[iMax-i]);
return 0;
}