Eclips中运行结果与终端不一致

本文探讨了在Eclipse和终端中运行同一段C程序时出现的不同结果,并提供了具体的代码示例。作者请求帮助分析导致差异的原因。

以前在Windows下好像就有过这种经验。在Eclipse里的java程序运行结果与命令行窗口的结果不一致。而往往是命令行窗口的结果是自己期望的。最近在学习LINUX,使用的是Eclpise+CDT环境。今天学习stty命令时,又一次出现了这种怪事。把代码贴出来,大家帮我分析一下原因吧。


 1 #include <stdio.h>
 2 #include <termios.h>
 3 
 4 void showbaud(int thespeed);
 5 void show_some_flages(struct termios *ttyp);
 6 
 7 
 8 int main()
 9 {
10     struct termios ttyinfo;
11     if (tcgetattr(0,&ttyinfo)==-1) {
12         perror("cannot get params about stdin.");
13         exit(1);
14     }    
15     
16     showbaud(cfgetospeed(&ttyinfo));
17     
18     printf("the erase character is ascii %d, Ctrl - %c\n",
19         ttyinfo.c_cc[VERASE],ttyinfo.c_cc[VERASE]-1+'A');
20     printf("the line kill character is ascii %d, Ctrl - %c\n",
21         ttyinfo.c_cc[VKILL],ttyinfo.c_cc[VKILL]-1+'A');
22     
23     show_some_flages(&ttyinfo);
24     
25     return 1;
26     
27 }
28 
29 void showbaud(int thespeed)
30 {
31     printf("the baud rate is");
32     switch (thespeed) {
33         case B300:printf("300\n");break;
34         case B600:printf("600\n");break;
35         case B1200:printf("1200\n");break;
36         case B1800:printf("1800\n");break;
37         case B2400:printf("2400\n");break;
38         case B4800:printf("4800\n");break;
39         case B9600:printf("9600\n");break;    
40         default:printf("FAST\n");
41             break;
42     }    
43     
44 }
45 
46 struct flaginfo{int f1_value;char *f1_name;};
47 
48 struct flaginfo input_flags[]={
49     IGNBRK,"Ignore break condition",
50     BRKINT,"Signal interrupt on break",
51     IGNPAR,"Ignore chars with parity errors",
52     PARMRK,"Mark parity errors",
53     INPCK,"Enable input parity check",
54     ISTRIP,"Strip character",
55     INLCR,"Map NL to CR on input",
56     IGNCR,"Ignore CR",
57     ICRNL,"Map CR to NL on input",
58     IXON,"Enable start/stop output control",
59     IXOFF,"Enable start/stop input control",
60     0,NULL    
61 
62 };
63 
64 struct flaginfo local_flags[]={
65     ISIG,"Enable signals",
66     ICANON,"Cannonical upper/lower appearance",
67     ECHO,"Enable echo",
68     ECHOE,"Echo ERASE as BS-SPACE-BS",
69     ECHOK,"Echo KILL by starting new line",
70     0,NULL    
71     
72 };
73 
74 
75 void show_some_flages(struct termios *ttyp)
76 {
77     show_flagset(ttyp->c_iflag,input_flags);
78     show_flagset(ttyp->c_lflag,local_flags);    
79 }
80 
81 void show_flagset(int thevalue,struct flaginfo thebitnames[])
82 {
83     int i;
84     for (i = 0; thebitnames[i].f1_value; i++) {
85         printf("%s is ",thebitnames[i].f1_name);
86         if(thevalue & thebitnames[i].f1_value)
87             printf("ON\n");
88         else
89             printf("OFF\n");
90     }
91     
92 }
93 

在eclipse中,运行结果为:

 

 

而在终端里面运行结果为:

事实上,终端里的结果是正确的。而ECLIPSE中的结果不正确。

我又在终端和ECLIPSE中多次运行了一下。每次结果都如上所示。

而Eclipse里的C编译器和终端里的一样,都是调用的GCC.那为什么结果会不一样呢?

转载于:https://www.cnblogs.com/liuyazhou/archive/2010/05/07/1729893.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值