运行c程序时eclipse控制台窗口奇怪的输出

时间:2016-04-28 19:05:15

标签: c eclipse console eclipse-cdt

我有一个简单的c程序:

    #include<stdio.h>
    int main() {
    int k, r;
    long int i = 0l, j = 1, f;

    printf("FIBONACCI SERIES:\n");

    // Taking maximum numbers from user
    printf("Enter the number range:");
    scanf("%d", &r);

    // Printing first two values.
    printf("\n%ld %ld", i, j);

    for (k = 2; k < r; k++) {
        f = i + j;
        i = j;
        j = f;
        printf(" %ld", j);
    }

    return 0;
    }

当我在eclipse c / c ++控制台中运行时,我必须先输入一个数字(scanf),然后显示所需的输出。第一个输出应该是:

printf(&#34; FIBONACCI系列:\ n&#34;);

但是不是。我必须先输入一个数字。其余的如下:

--------------------------
8
FIBONACCI SERIES:
Enter the number range:
0 1 1 2 3 5 8 13
--------------------------

当我在cmd窗口中运行可删除文件时,它可以按原样运行...

FIBONACCI SERIES:
Enter the number range:8

0 1 1 2 3 5 8 13

(刚开始使用Eclipse)。谢谢。

更改为:

#include<stdio.h>
int main() {
int k, r;
long int i = 0l, j = 1, f;

printf("FIBONACCI SERIES:\n");

// Taking maximum numbers from user
printf("Enter the number range:\n");
scanf("%d", &r);

// Printing first two values.
printf("\n%ld %ld", i, j);

for (k = 2; k < r; k++) {
    f = i + j;
    i = j;
    j = f;
    printf(" %ld", j);
}
printf("\n");
return 0;
}

结果相同:

-------------------------------
8
FIBONACCI SERIES:
Enter the number range:

0 1 1 2 3 5 8 13
-------------------------------

1 个答案:

答案 0 :(得分:0)

你在这里看到的问题归结为缓冲。当您在Eclipse控制台中运行程序时,您正在使用管道进行操作,标准库将使用该缓冲区进行缓冲。但是当你从终端运行时,你会得到tty缓冲。默认情况下,管道缓冲stdout将完全缓冲,但在终端中它将被线路缓冲。

您可以通过简单地刷新缓冲区来解决此问题,例如

fflush(stdout);
<{1>} / printf

之前的

或者,您可以使用scanf强制缓冲。

以下是man setbuf的关键位:

  

通常所有文件都是块缓冲的。如果流引用a   终端(正如stdout通常那样),它是行缓冲的。该   默认情况下,标准错误流stderr始终是无缓冲的。

最后要注意的是,您应该可以通过setbuf运行程序来重现终端中的问题:

tee