我有一个简单的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
-------------------------------
答案 0 :(得分:0)
你在这里看到的问题归结为缓冲。当您在Eclipse控制台中运行程序时,您正在使用管道进行操作,标准库将使用该缓冲区进行缓冲。但是当你从终端运行时,你会得到tty缓冲。默认情况下,管道缓冲stdout
将完全缓冲,但在终端中它将被线路缓冲。
您可以通过简单地刷新缓冲区来解决此问题,例如
fflush(stdout);
<{1>} / printf
之前的
或者,您可以使用scanf
强制缓冲。
以下是man setbuf的关键位:
通常所有文件都是块缓冲的。如果流引用a 终端(正如stdout通常那样),它是行缓冲的。该 默认情况下,标准错误流stderr始终是无缓冲的。
最后要注意的是,您应该可以通过setbuf
运行程序来重现终端中的问题:
tee