0

好的,所以我正在尝试学习 C 并且我希望我的用户输入一个值,所以我正在使用 scanf。我一开始没有冲洗,因为在我输入两个值之前什么都没有。现在我有了它们,虽然我遇到了同样的问题,但在我输入两个数字之前仍然没有输出。这是我的代码:

#include <stdio.h>
using namespace std;

int main()
{

    int i1, i2, sums;

    printf( "Enter first integer\n" );
    fflush(stdout);
    scanf( "%d", &i1 );

    printf( "Enter second integer\n" );
    fflush(stdout);
    scanf( "%d", &i2 );
    sums = i1 + i2;

    printf( "Sum is %d\n", sums );
    fflush(stdout);
    return 0;
}

任何帮助将不胜感激。

4

3 回答 3

1

以下对我来说很好:

#include <stdio.h>
int main() {
    int i1, i2, sums;

    printf( "Enter first integer\n" );
    scanf( "%d", &i1 );

    printf( "Enter second integer\n" );
    scanf( "%d", &i2 );

    sums = i1 + i2;
    printf( "Sum is %d\n", sums );

    return 0;
}

并给出:

Enter first integer
1
Enter second integer
6
Sum is 7

这是在 XP 下使用 Cygwin。您使用的是什么平台和编译器?

更新:一种可能性是,因为您在 Eclipse 环境中运行,它可能会做一些奇怪的事情,干扰正常的 I/O 规则。

我很确定标准输出,即使它不像标准错误那样是行缓冲的,如果你尝试从标准输入读取,也会自动刷新(至少在我使用过的大多数环境中,这是少数)。

Eclipse 可能会摆弄将控制台连接到程序的实际 I/O 的方式。我会尝试将代码编译为独立的可执行文件,然后在 Eclipse 环境之外运行它。如果它在那里运行良好,那么它可能是 Eclipse 和程序之间的交互。

正如我所说,您的程序在 XP 和 Cygwin 下运行良好,即使没有刷新。

需要进一步解释。正如 Jerry Coffin 在评论中正确指出的那样,C 标准(c1x,2009/03/01 草案)指出:

5.1.2.1 第 6 段:交互设备的输入和输出动态应按照 7.19.3 的规定进行。这些要求的目的是尽快出现无缓冲或行缓冲的输出,以确保在程序等待输入之前实际出现提示消息。

5.1.2.1 第 7 段:构成交互式设备的内容是实现定义的。

7.9.13 第 3 段:当流未缓冲时,字符应尽快从源或目标出现。否则,字符可能会作为一个块累积并传输到主机环境或从主机环境传输。当一个流被完全缓冲时,当缓冲区被填满时,字符将作为一个块传输到主机环境或从主机环境传输。当流被行缓冲时,当遇到换行符时,字符旨在作为块传输到主机环境或从主机环境传输。

7.9.13 第 7 段:在程序启动时,预定义了三个文本流,不需要显式打开 - 标准输入(用于读取常规输入)、标准输出(用于写入常规输出)和标准错误(用于写入诊断输出)。最初打开时,标准错误流没有完全缓冲;当且仅当可以确定流不引用交互式设备时,标准输入和标准输出流才被完全缓冲。

可能发生的情况是 Eclipse 与程序输入和输出交互的方式可能导致程序无法将 stdout 识别为交互式设备。然后它将被完全缓冲,这意味着在缓冲区已满或程序终止之前您不会看到输出。

于 2009-09-29T02:23:22.527 回答
0

我认为您需要在“scanf”中添加“\n”。像这样。

scanf( "%d\n", &i2 );

试试看。

于 2009-09-29T02:19:35.527 回答
0

我认为你正在冲洗错误的东西,尝试使用标准输入而不是使用标准输出来冲洗 scanf,就像这样

#包括

main() { int i, j,sums; printf("请输入第一个整​​数\n");

  scanf("%d",&i);
  fflush(stdin);
  printf("enter the second integer\n");

  scanf("%d",&j);
  fflush(stdin);
  sums = i + j;
  printf("sum is %d\n",sums);
  //fflush(stdin);
  getchar();

}

于 2009-09-29T05:10:38.713 回答