代码之家  ›  专栏  ›  技术社区  ›  Akari Oozora

无限输入直到空白

c
  •  0
  • Akari Oozora  · 技术社区  · 6 年前

    例如:

    #include <stdio.h>
    
    int main()
    {
    int A;
    scanf("%i", &A);
    
    /// here i'd like to insert a loop function that will repeat every time the user insert a number 
    
    
    
    scanf("%i, &A);
    printf("Number: ", A);
    /// end loop
        return 0;
    }
    
    
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   chux    6 年前

    制作一个“无限”阅读器,读取每个输入,直到用户按enter键?

    长的 行。

    线路限制

    BUFSIZ 应至少为256。C17dr§7.21.2 9

    也许你的实现可以处理更多的或者无限的——或者代码被限制在254。

    输入缓冲

    stdin 没有什么 被给予 scanf() 处理直到输入整行,包括 '\n'


    有一些方法可以超越缓冲,有些是标准的,有些是特定于实现的。你需要这些。我想这只是关于OP目标的部分答案。


    线 fgets() 缓冲区 char buffer[BUFSIZ + 1] 然后分析一下。

    char buffer[BUFSIZ+1];
    while (fgets(buffer, sizeof buffer, stdin)) {
    
      // Parse the line looking for an int
      // Best to use strtol and family, here, for simplicity, use `sscanf()`
      int A;
      int count = sscanf(buffer, "%i", &A);
      if (count == 1) {
        printf("%d\n", A);
      } else if (buffer[0] == '\n') {
        break;
      } else {
        printf("Unexpected input <%s>\n", buffer);
        break;
      }
    }
    

    scanf("%i", &A); "\n" "%i" 读取并安静地消耗所有前导空格(包括新行),直到出现非空白。

        2
  •  0
  •   Wootiae    6 年前

    int input = 1;
    while (input > 0)
    {
       int number;
       input = scanf("%i", &number);
       // some logic.
    }
    

    input 标志为1,循环开始。 scanf 返回到 输入 -1如果它不读取任何其他内容,则计数已读元素(在本例中为一个)。循环将一直执行,直到输入NaN(不是数字)。

        3
  •  -1
  •   Susmit Agrawal Sudip Bolakhe    6 年前

    getchar 而不是 scanf ,不需要在每个字符后按enter键。

    int main()
    {
        int A = 0;
        while(A != '\n') {
            A = getchar();
            // Any other logic
        }
    }