시간, 사용자 ID 및 가중치를 기록하는 앱을 만들고 있습니다. 처음 전달 된 토큰이 정수인지 어떻게 확인할 수 있습니까? 나는 isdigit을 사용할 것이라고 생각했지만, 그것은 단일 문자로만 작동합니다. 첫 번째 토큰이 정수가 아닌 경우 올바르지 않은 시간을 출력하고 싶습니다. 첫 번째 토큰은 정수 (예를 들어 알파벳을 가지고) 나는 아직도 내가 원하지 않는 변수 타임 스탬프 ,,의 수를 얻을 수없는 경우 나는 현재전달 된 문자열이 정수인지 확인합니다.
sscanf(userInput, "%d %s %f", ×tamp, userID, &weight);
을 사용하고 있습니다.
int main()
{
char userInput[99];
int timestamp, timestampT = 0;
char userID[31];
userID[0] = 0;
float weight, weightT, day, rateW;
while(fgets(userInput, 99, stdin) != NULL){
sscanf(userInput, "%d %s %f", ×tamp, userID, &weight);
if(timestamp == 0){
printf("%s\n", "Invalid time");
}
else if(!isalpha(userID[0]) || userID[0]=='_' || userID[0] == 0){
printf("%s\n", "Illegal userID");
}
else if(weight < 30.0 || weight > 300.0){
printf("%s\n", "Illegal weight");
}
else if(timestampT > 0){
day = timestampT/86400;
rateW = (weightT -weight)/(day - timestamp/86400);
if(rateW > 10.0 || rateW < -10.0){
printf("%s\n", "Suspiciously large weight change");
}
}
else{
printf("%d %s %f \n", timestamp, userID, weight);
timestampT = timestamp;
timestamp = 0;
weightT = weight;
}
userID[0] = 0;
}
}
sscanf의 결과를 사용하여 다른 문자열을 작성한 다음 원본을 다시 작성 문자열과 비교하십시오. 서로 다르다면 올바르게 변환되지 않은 것입니다. 예 : 'foo = printf ('% d % s, % f', 값, 여기); if (! strcmp (foo, userinput)) {ruh_roh(); }' –
['sscanf()'] (http://en.cppreference.com/w/c/io/fscanf)의 결과를 사용하여 * 성공적으로 구문 분석 된 매개 변수의 수를 확인하십시오. [여섯 번째 계명에 유의 **] – WhozCraig
문자열의 모든 문자를 타임 스탬프의 경우 'isdigit'로, 사용자의 타임 스탬프의 경우 'isalpha'로 검사 할 수 있습니다. 신분증.(더 나은 함수를 작성하십시오.) 또는 첫 번째'sscanf'에서 문자열을 읽어 들인 다음 해당 문자열에서'sscanf ('..., "% d", ...)'를 실행할 수 있습니다. –