我有这段代码,我试图用它来获取用户输入。基本上,用户可以给出输入、索引和字符,也可以只给出输入和索引。
当我尝试运行我的程序时,如果我提供全部三个,它就可以工作,但如果我只提供一个输入和一个索引,则不会进入循环。然后,如果我再次输入相同的输入和索引,它就会起作用,然后无论我输入什么,都会导致循环内的
input
上的 if 检查之一退出程序 - 表明 scanf()
没有像我一样读取内容曾希望。也许我缺少一个缓冲区或其他东西?是我设置的方式有问题吗?
char input[10] = "";
int index;
char c;
int result;
while ((result = scanf("%s %d %c", input, &index, &c) != EOF)) {
// do something
}
使用 @Pablo 的建议会更容易,但如果你不介意编写 hacky 代码,这是可能的:
int main( void ) {
char input[10]; // initialisation here is unneccesary
int index;
char cArr[10]; // go with it for now...
int result;
// notice the parentheses
// The last specifier will be satisfied by the '\n'
while( ( result = scanf( "%s%d%[^\n]", input, &index, cArr) ) >= 2 ) {
printf( "result %d\n", result );
if( result == 2 )
printf( "%s,%d\n\n", input, index );
else
printf( "%s,%d,%c\n\n", input, index, cArr[1] ); // NB: assumes single SP separator!
}
return 0;
}
互动:
foo 42
result 2
foo,42
bar 24 X
result 3
bar,24,X
此代码存在风险,因为它没有考虑有限的缓冲区大小。