사용자가 공용체의 한 섹션에 입력 한 내용이 실제로 정수인지 확인하려고합니다. 나는 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'는 단일 문자를 검사합니다. 따라서 코드는 'duedate'를 문자열로 사용해야합니다. 그런 다음'for' 루프를 사용하여 문자열의 각 문자가 숫자인지 확인할 수 있습니다. – user3386109
'YYYYMMDD'에 8 자리 시퀀스를 입력하는 경우 문자열을 더 잘 입력하고 길이가 8 자인지 확인한 다음 해당 문자를 처리합니다. 문자가 아닌 숫자를 처리하십시오. 그 날짜 값으로'int'를 갖는 것은 라이브러리 날짜 함수에별로 유용하지 않습니다. –