c - 验证整数输入和一般情况

标签 c

我将如何验证用户是否输入了正确的输入,例如对于整数,因为我之前将变量声明为整数。 (意思是 alpha 会得到数字输入。)
另外,是否有更通用的方法来验证输入和获取输入?除了使用 scanf 之外?

#include <stdio.h>



int main() {
    printf("We will check if your number is odd, even, zero or negative \n");
    int input;
    printf("Enter your number: \n");
    scanf("%d", &input);
    if (input < 0){
        printf("Number is Negative \n");
    }
    else if (input == 0){
        printf("Number is Zero \n");
    }
    else if (input % 2 == 0){
         printf("Number is Even \n");
    }
    else if (input % 2 == 1){
        printf("Number is Odd \n");
    }
    return 0;
}

最佳答案

使用 scanf() 系列意味着对于给定的转换说明符(在本例中为“%d” -> 整数),输入的语法应该是完美的。
如果您想验证输入语法的正确性,则需要将输入作为一个整体,然后自行解析。
你可以使用例如fgets() ( https://en.cppreference.com/w/c/io/fgets ) 这样做。

一旦您将输入保存在“字符串”(数组或分配的内存中的字符)中,您就可以开始“猜测”它是什么,使用多个 sscanf() (https://en.cppreference.com/w/c/io/fscanf) .这对已经在内存中的字符串比对输入流要容易得多。因为“部分成功后猜错,从头开始重试”易记难输入。

正如 SomeProgrammerDude 已经评论过的,尝试使用 sscanf()(在内存中,或在输入中使用 scanf())进行扫描的方法是检查返回值;它会告诉您成功或失败。

关于c - 验证整数输入和一般情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52197554/

相关文章:

c - 尝试在 C 中复制数组时的字符串连接

c - C 函数中的数组参数 & 返回什么类型?

c - 有符号整数和无符号整数是一一对应的吗?

c - 如何将 Mac 字符串转换为 C 中的字节地址

c - 使用 free() 时程序发生奇怪的变化

c++ - NCurses – getstr() 和功能键

c - 可以存储在 long double 中的最大整数

c++ - 在 gTest 中模拟 FreeRTOS 函数

c++ - 非常奇怪的 C 行为

c - fork() 和父/子进程 ID