不知不觉,学习C语言也快一年了。虽然有C语言课,但是老师完全让我们自己看书,在自学的过程中,和周围同学交流中,以及后来在CSDN,BCCN,百度知道看帖回帖中,也看到许多C语言新人常遇到的问题与常犯的错误。为了让新人们少走弯路少碰壁,我便打算写下此文。当然,由于我自己的水平也有限,其中可能自己也不知不觉犯了错误,望高手们果断斧正。
M) L' t5 C, P% A8 N0 v9 c1 _ 下面的程序,基本是摘自在CSDN,BCCN,百度知道的提问帖,以及我身边的人和我自己写的程序,限于篇幅,对于问题影响不大的部分我已经删去或改写,一些与相应问题无关的错误也一并进行了修改。对于完整的修正后的程序都在code::blocks 10.05(编译器gcc,调试器gdb,平台windows 7旗舰版)上运行过。
7 g) ?& j( t( n+ [4 O9 O( X% [ 1、程序画面一闪而过 6 E7 v. e4 Y) Y' r+ O+ b* {
#include
0 Z8 q6 F# P' F int main(void) 6 c" L* W0 D8 Z7 M9 t, N7 [
{
2 Y3 d3 `7 s; t% t int iSignal; /*定义变量表示信号灯的状态*/ ; ~* Q2 o/ J7 }4 p# Q5 E8 C
printf(“the Red Light is 0,the Green Light is 1\n”); /*输出提示信息*/
% C: P) t, q [ scanf(“%d”,&iSignal); /*输入iSignal变量*/
$ U2 {+ c; c' f& U if(iSignal==1) /*使用if语句进行判断*/
9 I& o* k( Q. M! z; u { : ?* C+ n5 r4 @; }* I- q
printf(“the Light is green,cars can run\n”); /*判断结果为真时输出*/ 3 v" F6 u0 y& @, O, T
} 3 a8 Y1 D8 D8 u, J: w1 u% k
if(iSignal==0) /*使用if语句进行判断*/
( O% o% T0 \+ C9 ^+ V/ z {
! [5 @& V a2 v1 ~$ H printf(“the Light is red,cars can’t run\n”); /*判断结果为真时输出*/ * h; [9 ?$ h6 M
}
) X7 t8 e7 w/ W( X0 h( A return 0; 1 a4 o6 [4 w: i! H7 `# ]
} . V( \$ a! _( _2 m+ g
解析:在XP以上的系统用win-tc,dev-cpp等IDE编译运行此程序时,无论输入什么数字,结果都是一闪而过,因为程序执行完语句后就直接退出了。
2 w$ D* X# {$ \& F0 ^5 M4 P 解决方案:这里有几个办法(1) . \0 y( [8 \# B' p& `
在程序开头加上#include
/ y9 G4 J+ j( ~& s' G, ] T 然后在程序末尾加上system(“pause”);
7 w+ X2 v7 q' N+ b5 J 此方法仅适用于MS-DOS,windows,不适用于*nix等系统(2)
1 k' F% O) [8 P* b3 z) m 在需要暂停的地方加入一个或两个getchar(); ; J0 }$ _1 Q+ {
这种方法,实质上并不是暂停程序,而是让程序等待用户输入若干个回车。但是效果和暂停是相同的。(3)
$ |$ t% t- }( v 在程序开头加上#include 1 o- j f1 j' d" x4 {& ^
在需要暂停的地方加入一个getch();,原理和上一种差不多。在win-tc里用得比较多。
; o$ L4 K3 l' r8 V& R 2、if,for,while的判断后直接跟; 6 v: \. o4 p1 r" f6 h! J3 Z% z, M
例如: 7 z$ U) P9 J( n2 H- L
#include 8 G0 V% ?! `. e: F# w2 b3 C5 @
int main(void) |