【问题标题】:Separate scanf input with space in C在C中用空格分隔scanf输入
【发布时间】:2015-06-05 21:52:28
【问题描述】:

我尝试输入一系列数字,每个数字用空格分隔。一旦给出0,这一系列数字就必须停止输入。

我使用for 循环来执行此操作。如果我用\n 分隔每个数字,在我将0 作为数字给出后,它确实会停止读取输入。

但是,如果我改为用空格分隔每个数字,则在我提供 0 后不会发生任何事情。它只是不断读取输入。

我试图找到答案,如果解决方案很明显,我很抱歉。我刚从C开始,请多多包涵。

int main(int argc, char **argv){

    int ar[1000];
    int i;

    printf("Give a series of numbers, separated by space. Stop reading when `input is 0.\n --> : ");`

    for (i = 0; i < SIZE ; i++){
        scanf("%d", &ar[i]);
        if (ar[i] == 0){break;}
    }

   return 0;
}

【问题讨论】:

  • 您必须按 Enter 键才能开始处理该行。 scanf 甚至不会读取一行中的第一个数字,直到您按下回车键。
  • 如果我理解正确,scanf 仅在您按回车后初始化?有没有办法解决这个问题? (使用scanf)使其初始化带有空格的循环?感谢您的回复。
  • 您的代码有几个编译错误,但应该可以修复这些错误:需要在某个地方定义 SIZE(也许您在标题中有这个?),它应该真正匹配您的数组大小;并且您的 printf 行末尾有一个杂散撇号
  • 输入 0 时是否需要它停止读取?为什么不在你的说明中说“完成后按 Enter”?

标签: c for-loop scanf break


【解决方案1】:

默认情况下,大多数命令行终端只会在您输入一整行后将输入发送到正在运行的程序。这是为了让您有机会使用退格键更正拼写错误。

一个简单的解决方案是,而不是手动输入输入,将其放入文本文件并使用文件输入重定向 (&lt;)。此输入重定向语法适用于 Linux 和 Windows shell。

myProgram.exe < myInput.txt

【讨论】:

  • 感谢您的提示,以后可能会派上用场。虽然现在我尝试完成我的任务,但显然希望手动完成输入。
  • 在输入 0 但在按下换行符之前立即停止输入非常复杂,您必须使用特定于操作系统的 API。你确定这两个都是要求吗?也许必须在最后输入换行符可以吗?
  • 确实,我想我将不得不接受换行。这些是第一次介绍性讲座之后的作业,它们不可能像我找到的解决方案那么复杂。现在我正在尝试使用 getchar(),但是是的,我认为缓冲区处理也必须解决,这很可能不是他们期望我做的。
猜你喜欢
  • 1970-01-01
  • 2015-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-23
  • 2020-09-04
  • 2023-03-10
相关资源
最近更新 更多