scanf() 并在 C 中的一个函数中清除输入缓冲区?

scanf() and clear input buffer in one function in C?

我有以下想法:

我有一个清除输入缓冲区的函数:

void clear_inputBuffer()
{
    char c;
    while ( (c = getchar()) != '\n' && c != EOF);
}

而不是为每个输入写入

scanf("%d", &selection);
clear_inputBuffer();

我想要一个包含两者的函数。像这样:

int terminalInput(const char *format, ...) {
    int count = 0;
    va_list args;
    // Pass variable parameters
    va_start(args, format);
    count = scanf(format, args);
    va_end(args);

    clear_inputBuffer();
    return count;
}

函数 returns 1 但 "test" returns 也不管输入是什么都是 1.

int main(int argc, const char * argv[]) {
    int test;
    printf("number:");
    terminalInput("%d", &test);
    printf("Input: %d\n", test);

    return 0;
}

终端输出:

$ ./a.out
number:345
Input: 1

您不能将 scanfva_list 一起使用。您需要改用 vscanf

另外,我觉得有必要提一下,通常你应该几乎总是完全避免使用 scanf/vscanf;它是 notoriously hard to use correctly. Instead, you should read a line of inputfgets(或 getline,如果可用),然后在线上使用 sscanf