私は、ユーザーがユニオンの1つのセクションに入力するものは実際には整数であることを確認しようとしています。私はisdigit関数(下記参照)を使用しようとしていますが、私は成功していません。私がする必要があるのは、ユーザーが日付の数字だけを入力することを確認することですが、私はそれに多くの問題があります。Cのユニオンでの整数入力の確認
マイコード:
#define STRSIZE 30
#define PROFSIZE 30
#define NBRASSI 2
#define TRUE 1
#define FALSE 0
struct assignment
{
char name[STRSIZE];
char prof[PROFSIZE];
int duedate;
float value;
};
。 。 。
struct assignment populate_structure(struct assignment assi[], int assi_nbr)
{
int count;
int date_check = FALSE;
for (count = 0; count < assi_nbr; count++)
{
flushall();
printf("Enter Assignment #%d name (max %d chars):\n", count + 1,
STRSIZE);
gets(assi[count].name);
while (date_check == FALSE)
{
printf("Enter due date for Assignment #%d (YYYYMMDD):\n",
count + 1);
scanf("%d", &assi[count].duedate);
if (isdigit(assi[count].duedate))
{
date_check = TRUE;
}
else
{
printf("Invalid");
date_check = FALSE;
}
}
printf("Enter %% of final grade for Assignment #%d:\n", count + 1);
scanf("%f", &assi[count].value);
flushall();
printf("Enter Professor's name for Assignment #%d (max %d chars):\n",
count + 1, PROFSIZE);
gets(assi[count].prof);
printf("\n\n");
}
return assi[count];
}
それは私のVisual Studioでのエラーを与えていないが、私はプログラムを実行するとき、私は、任意の値が[]アッシのため入力された時はいつでも中止エラーが発生します。私が削除した場合
をduedate if(isdigit(assi [count] .duedate)))、プログラムは正常に実行されます(duedateの整数のみを入力する限り)。どんな助けでも大歓迎です。
あなたは「ユニオン」とは何ですか?コードには何もありません。しかし、あなたの 'scanf':戻り値をテストすれば、あなたは確信が持てます。それは '1'でなければなりません。 –
'isdigit'は1文字をチェックします。したがって、コードは 'duedate'を文字列として扱う必要があります。次に、 'for'ループを使用して、文字列の各文字が数字であることを確認できます。 – user3386109
'YYYYMMDD'の8桁のシーケンスを入力する場合は、文字列を入力する方が良いでしょう。文字列は8文字で、数字ではなく文字を処理してください。とにかく、その日付値で 'int'を持つことは、ライブラリの日付関数にとってあまり有用ではありません。 –