2014-10-03 129 views
2

我用Eclipse编译c代码,但突然间所有的代码都遇到了麻烦,以前都是正确的。Eclipse编译器的问题

例如,如果我想使用scanf输入一个参数,在scanf之前我会用一个printf语句来引导用户。像printf(“键入大小\ n”);但是在Console中编译之后,我需要先输入大小,然后弹出printf(“type size \ n”)命令,这应该是相反的。

#include <stdio.h> 
#include <stdlib.h> 

void try(int a); 

int main(void) 
{ 
    int a; 

    printf("type the size\n"); 
    try(a); 

    return 0; 
} 

void try(int a) 
{ 
    scanf("%d", &a); 
    printf("%d\n", a); 
} 

结果:型 大小选择2 我需要先输入一个数,这里就像我需要2型,然后再在“输入大小”刚弹出的大小。

这里就是我想:

型大小选择2

+0

Eclipse是不是编译器... – Lundin 2014-10-03 09:50:48

+0

对不起,我使用Eclipse和MinGW GCC编码C – user3595689 2014-10-03 09:52:51

+2

另外,'try(a)'不会将输入的值传递给函数。你需要传递一个指针给它,而不是把它写到原地,或者更好的办法是从函数和'a = try();'返回'a'。最后'try'是C++中的保留字,所以选择一个不同的名字可能会更好。 – Rup 2014-10-03 09:53:58

回答

3

它的大小bug in eclipse,这已经报道了大多数使用Eclipse和MinGW的人。

为了克服这个问题,你可以每次调用后使用fflush(stdout)printf或使用的main开始执行以下操作:

setvbuf(stdout, NULL, _IONBF, 0); 
setvbuf(stderr, NULL, _IONBF, 0); 

这将导致每当被写入到stdoutstderr立即冲洗。

+0

好吧我会尝试,但昨天都很好,欢呼 – user3595689 2014-10-03 09:55:17

0

试试这个,例如,

#include <stdio.h> 
#include <stdlib.h> 
void try(int *a); 
int main() { 
int a; 
printf("type the size\n"); 
fflush(stdout); 
try(&a); 
return 0; 
} 
void try(int *a){ 
scanf("%d", a); 
printf("%d\n", *a); 
fflush(stdout); 
return; 
} 

此外,您还需要得到Â尝试回到主设定的值,这样,你需要通过AA指针如图

+0

@ user694733,编辑我的答案,upvote请问 – 2014-10-03 09:57:43

+0

我不认为答案是错误的后,我的编辑 – 2014-10-03 09:58:36

+0

这并不能解决实际问题。在'tryf'的'scanf'之前,第一个'printf'缓冲区没有被刷新。 C标准澄清了在第一次遇到'scanf'之前应该刷新它,所以这显然是Eclipse中的一个错误。一种解决方法是通过'fflush'标准函数强制执行它,正如@CoolGuy指出的那样。 – 2014-10-03 10:03:57