繁体   English   中英

C,添加语句以检查输入是否为 integer

[英]C, add statement to check if input is an integer

这就是我目前所拥有的,我想在底部添加一个打印printf("Error");的语句如果输入的数据不是数字。

int main() {
    long long number;
    long long ret;
    
    printf("Enter a number between [0 - 4294967295]: ");
    scanf("%lld", &number);
    
    printf("Number is %lld\n", number);
    //if statements to see if number is above/below the range
    if (number < 0) {
        printf("Error: This number is below the range.");
        return -1;
    }
    if (number > 4294967295) {
        printf("Error: This number is above the range.");
        return -1;
    } 
    //this is where I would like to add the statement
    return 0;
}

注意:用户 jwdonahue 使用fgets() / sscan()指出了一个更好的解决方案


根据scanf的手册页:

成功时,这些函数返回成功匹配和分配的输入项的数量 如果早期匹配失败,这可能会小于规定的值,甚至为零。

由于您要读取一个值,因此您首先检索scanf()的返回值并在检查number之前检查它:

int read_items;
read_items = scanf("%lld", &number);
if (read_items == 0) {
  printf("Not a number\n");
  return 1; // exit with an error status (!= 0)
}

此外,您还应该在此之前检查是否读取了一个值,手册页对此进行了描述:

如果在第一次成功转换或匹配失败发生之前到达输入结尾,返回EOF 如果发生读取错误,也会返回 EOF

因此:

int read_items;
read_items = scanf("%lld", &number);
if (read_items == EOF) {
  printf("No value entered or error occured\n");
  return 1; // exit with an error status (!= 0)
}
if (read_items == 0) {
  printf("Not a number\n");
  return 1; // exit with an error status (!= 0)
}

  
for (i=0;i<length; i++)
        if (!isdigit(input[i]))
        {
            printf ("Entered input is not a number\n");
            exit(1);
        }

isdigit(c)是 C 中的 function 可用于检查传递的字符是否为数字。 如果是数字则返回非零值,否则returns 0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM