scanf “extra input” required

前端 未结 3 2128
遇见更好的自我
遇见更好的自我 2021-01-14 01:48

for some simple HW code I wrote I needed to get 7 arguments via the scanf function:

scanf(\"%d %d %d %d\\n\", &vodka, &country, &life, &glut)         


        
3条回答
  •  死守一世寂寞
    2021-01-14 02:38

    As explained by @chqrlie and @Blue Moon a white space in the format, be it ' ', '\n', '\n' or any white-space does the same thing. It directs scanf() to consume white-space, such as '\n' from an Enter, until non-white-space is detected. That non-white-space character is then put back into stdin for the next input operation.

    scanf("%d\n", ...) does not return until some non-white space is entered after the int. Hence the need for the 8th input. That 8th input is not consumed, but available for subsequent input.


    The best way to read the 4 lines of input is to .... drum roll ... read 4 lines. Then process the inputs.

    char buf[4][80];
    for (int i=0; i<4; i++) {
      if (fgets(buf[i], sizeof buf[i], stdin) == NULL) return Fail;
    }
    if (sscanf(buf[0], "%d%d%d%d", &vodka, &country, &life, &glut) != 4) {
      return Fail;
    }
    if (sscanf(buf[1], "%d", &ageof) != 1) {
      return Fail;
    }
    if (sscanf(buf[2], "%d", &dprice) != 1) {
      return Fail;
    }
    if (sscanf(buf[3], "%d", &mprice) != 1) {
      return Fail;
    }
    // Use vodka, country, life, glut, ageof, dprice, mprice
    return Success
    

提交回复
热议问题