C 无限输入直到空白

C 无限输入直到空白,c,C,我如何制作一个无限读卡器,直到用户按下enter键才能读取所有输入? 例如: 一种简单的方法是直接检查每次读取。使用getchar而不是scanf,它不需要在每个字符后按enter键 int main() { int A = 0; while(A != '\n') { A = getchar(); // Any other logic } } 制作一个无限读卡器,在用户按下enter键之前读取每个输入 这可能不是真正可能通过通常的方式阅读

我如何制作一个无限读卡器,直到用户按下enter键才能读取所有输入? 例如:


一种简单的方法是直接检查每次读取。使用getchar而不是scanf,它不需要在每个字符后按enter键

int main()
{
    int A = 0;
    while(A != '\n') {
        A = getchar();
        // Any other logic
    }
}
制作一个无限读卡器,在用户按下enter键之前读取每个输入

这可能不是真正可能通过通常的方式阅读一长行

线限

实现应支持包含至少254个字符的行的文本文件,包括终止新行字符。宏BUFSIZ的值应至少为256。C17dr§7.21.2 9

也许您的实现可以处理更多或者无限的代码,或者代码限制为254

输入缓冲

stdin通常是行缓冲的。因此,在输入包括“\n”在内的整行之前,scanf不会处理任何内容。如果您可以在输入上使用后台空间来删除数据,则很可能就是这种情况

有一些方法可以超越缓冲,有些是标准的,有些是特定于实现的。你需要这些。我想这只是对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;
  }
}
扫描%i,&A;无法在%i读取时检测\n行,并安静地占用所有前导空白(包括新行),直到出现非空白。

可能您需要此功能

int输入=1; 当输入>0时 { 整数; 输入=扫描%i,&number; //有些逻辑。 }
在这种情况下,它将输入标志设置为1,然后循环开始。在本例中,如果scanf不读取任何其他内容,则返回输入-1。循环将一直执行,直到没有输入数字。

这是获取数字输入,然后将其与字符进行比较。EOF未选中!检查scanfCharacters的返回值是否可以直接与整数进行比较;它们本身基本上是8位inytegers。尝试过但失败了,在回车后不会停止。对不起,是getchar,不是scanf。修改了。哪个直到输入空白标题或直到用户只需按enter键为止。没有仅使用C库的可移植解决方案。你在说什么站台?例如,所使用的编译器和操作系统。我的意思是,输入3,打印一些东西,输入X,打印另一个东西。当输入一个空格时,代码停止。@FelipeWatanabe仍然建议用fgets将一行输入读入字符串。当输入正确解析为数字文本时,打印该文本。当输入仅为\n时,停止。如果输入是其他内容,请打印错误消息。除了循环和数组之外,我没有学习任何命令,您知道在哪里可以更好地理解这些内容吗?或者你介意演示一下这个ideia是如何工作的吗?我问这个问题是为了开始解决哦,谢谢。我会研究你所做的并尝试。非常感谢你。我不熟悉你的理解水平,所以我的推荐阅读C标准可能不适合你。只需在网上搜索即可。
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;
  }
}