양수 만 읽고 (unsigned long long
) 아무 것도 없으므로 scanf("%llu", &num);
을 사용합니다. 하지만 음수 값을 입력 할 수도 있습니다.
이 경우 양수를 확인하는 방법은 무엇입니까? 사용자는 [0..2^(64) -1]에 양수를 입력해야하지만 같은 간격으로 음수 값을 입력하면 입력 할 수 있습니다. 그러나 나는 long long
변수를 선언 할 수 없다. 2^64 - 1을 포함 할 수있다.입력 된 번호가 양수인지 확인하는 방법은 무엇입니까?
1
A
답변
1
당신은, fgets()
를 사용하여 문자 배열로 입력을 읽은 첫 번째 문자가 -
심볼unsigned long long
로 변환 strtoull()
를 사용하여 다음 숫자 이외의 문자를했습니다 있는지 확인 할 수있다.
char c, buff[100];
fgets(buff, sizeof(buff), stdin);
//sscanf(buff, "%*[ ]%c", &c);
sscanf(buff, "%s", buff);
//if((c<'0' || c>'9'))
if(buff[0]<'0' || buff[0]>'9')
{
printf("\nNegative or invalid number!");
}
else
{
num=strtoull(buff, NULL, 10);
}
strtoull()
ULLONG_MAX
이 (limits.h
에 정의) 돌아가서에 의해 반환되는 값이 unsigned long long
에 맞지 않을 경우 errno
ERANGE
에가 (이를 사용, errno.h
헤더 파일이 포함되어야합니다)을 설정합니다.
if(num==ULLONG_MAX && errno==ERANGE)
{
printf("\nOverflow");
}
sscanf()
의 %*[ ]
c
에 저장됩니다.설명대로 here, sscanf(buff, "%s", buff);
은 공백을 없애기 위해 양쪽에 문자열 buff
을 자릅니다.
2
숫자를 fgets()
으로 문자열로 읽은 다음이를 확인하십시오. strchr()
. 읽은 값이 부호 오래 오래 INT에 의해 표현 가능한 값의 범위를 벗어나면
, 함수가 ULLONG_MAX를 반환 번호가 범위를 벗어나면 마지막으로 실패 문자열을 숫자로 변환 할
strtoull()
를 사용 (<limits.h>
에 정의),errno
은ERANGE
으로 설정됩니다.
예 :
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void) {
char str[100]=;
fgets(str, sizeof(str), stdin);
str[strcspn(str, "\n")] = '\0';
if(strchr(str, '-') == NULL) {
printf("Not a negative number\n");
unsigned long long number = strtoull (str, NULL, 10);
printf("%llu\n", number);
} else {
printf("Negative number\n");
}
return 0;
}
출력 :
Not a negative number
12343566
및 대 -12343566 그것이 제공 :
Negative number
읽기 A * 문자열 *로 (예를 들어 '사용는 fgets ()') 그리고 그것에 대한 검증을하십시오. – usr
죄송 합니다만 Imma noobie in C ... 어떻게 문자열을'unsigned long long'으로 변환 할 수 있습니까? –
[오류 처리 기능이있는 uint64_t 캐스팅 문자열] (https://stackoverflow.com/q/46325780/2410359)을 참조하십시오. – chux