【问题标题】:printf statement is not executing before scanf statement in netbeanprintf 语句未在 netbean 中的 scanf 语句之前执行
【发布时间】:2014-06-21 18:17:16
【问题描述】:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i,N;
    for(i=0;i<5;i++)
    {
        printf("Enter The Number \n");
        scanf("%d", &N);
        printf("HELLO %d \n",N);
    }
    return 0;
}

当我在 NetBeans 中执行上述代码时,输​​出不会逐行执行,所有输出都一起执行,即当循环结束时...问题是 printf 和 scanf 不起作用

【问题讨论】:

  • 您的代码看起来不错。您的 IDE 可能存在问题/设置问题。
  • 您的确切输入和输出是什么?
  • @nIcEcOw。那是UB。然而,Windows 定义了它,afaik(但这个问题没有被标记为 Windows)。
  • @nIcEcOw; UB = 未定义行为:您不能在严格符合 C 标准的代码中执行此操作,该标准不允许刷新读取缓冲区。如果该软件应该仅在 Windows 机器上运行,您的建议可能是 OP 问题的解决方案(不过,我们对此知之甚少,因为 OP 不提供她提供的输入和她得到的输出)。但这不是可移植的(例如在大多数 Linux 机器上不起作用)。
  • 您的问题很简单:Netbeans(重新)将 IO 定向到自身而不是控制台导致 C 运行时检测到没有连接的交互式设备,这意味着 STDIN 和 STDOUT 是默认缓冲的,而不是 line-缓冲或无缓冲。在 IDE 之外执行完全相同的程序不会有任何问题。解决方法:手动禁用缓冲或添加fflush(STDOUT)-statements。

标签: c netbeans printf scanf


【解决方案1】:

你对问题的描述其实还不错:

许多 C 运行时库可以检测 stdout 是否连接到交互式设备(控制台窗口/终端)。
根据此,选择默认缓冲模式。

在终端/控制台窗口中执行程序,您将获得交互式设备的标准缓冲。

或者,调用

setvbuf(stdout, 0, _IOLBUF, BUFSIZ);

在对该流进行任何其他操作之前,会将stdout 流设置为默认的行缓冲操作。

【讨论】:

  • 出于好奇,我有时已经遇到过这种情况:STDOUTSTDIN 是什么?这是一个特殊的 Windows 东西吗?它们与标准的stdoutstdin 有什么不同吗?
  • @mafso:不,只是大写错误,显然我有时也会这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-04
  • 1970-01-01
  • 2020-08-13
  • 1970-01-01
相关资源
最近更新 更多