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
您不能将 scanf
与 va_list
一起使用。您需要改用 vscanf
。
另外,我觉得有必要提一下,通常你应该几乎总是完全避免使用 scanf
/vscanf
;它是 notoriously hard to use correctly. Instead, you should read a line of input 和 fgets
(或 getline
,如果可用),然后在线上使用 sscanf
。
我有以下想法:
我有一个清除输入缓冲区的函数:
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
您不能将 scanf
与 va_list
一起使用。您需要改用 vscanf
。
另外,我觉得有必要提一下,通常你应该几乎总是完全避免使用 scanf
/vscanf
;它是 notoriously hard to use correctly. Instead, you should read a line of input 和 fgets
(或 getline
,如果可用),然后在线上使用 sscanf
。