如何读取比 scanf 预期更少的参数?

问题描述 投票:0回答:1

我有这段代码,我试图用它来获取用户输入。基本上,用户可以给出输入、索引和字符,也可以只给出输入和索引。

当我尝试运行我的程序时,如果我提供全部三个,它就可以工作,但如果我只提供一个输入和一个索引,则不会进入循环。然后,如果我再次输入相同的输入和索引,它就会起作用,然后无论我输入什么,都会导致循环内的

input
上的 if 检查之一退出程序 - 表明
scanf()
没有像我一样读取内容曾希望。也许我缺少一个缓冲区或其他东西?是我设置的方式有问题吗?

  char input[10] = "";
  int index;
  char c;
  int result;

  while ((result = scanf("%s %d %c", input, &index, &c) != EOF)) {
     // do something
  }
c console scanf
1个回答
0
投票

使用 @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

此代码存在风险,因为它没有考虑有限的缓冲区大小。

© www.soinside.com 2019 - 2024. All rights reserved.