我有以下想法:
我具有清除输入缓冲区的功能:
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;
}
该函数将返回1,但是无论输入的正确内容是什么,“ test”也将返回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
答案 0 :(得分:4)
您不能将scanf
与va_list
一起使用。您需要改用vscanf
。
此外,我不得不提一提,总的来说,您几乎应该始终避免完全使用scanf
/ vscanf
; notoriously很难正确使用。相反,将you should read a line of input与fgets
(或getline
(如果可用)一起使用),然后在行上使用sscanf
。