a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 158|回复: 2

[程序员] 2012年软件水平考试程序员辅导笔记之程序员C语言新人常见问题

[复制链接]
发表于 2012-8-2 08:51:15 | 显示全部楼层 |阅读模式
不知不觉,学习C语言也快一年了。虽然有C语言课,但是老师完全让我们自己看书,在自学的过程中,和周围同学交流中,以及后来在CSDN,BCCN,百度知道看帖回帖中,也看到许多C语言新人常遇到的问题与常犯的错误。为了让新人们少走弯路少碰壁,我便打算写下此文。当然,由于我自己的水平也有限,其中可能自己也不知不觉犯了错误,望高手们果断斧正。
. m9 ?8 u6 t. v4 e4 l. I  下面的程序,基本是摘自在CSDN,BCCN,百度知道的提问帖,以及我身边的人和我自己写的程序,限于篇幅,对于问题影响不大的部分我已经删去或改写,一些与相应问题无关的错误也一并进行了修改。对于完整的修正后的程序都在code::blocks 10.05(编译器gcc,调试器gdb,平台windows 7旗舰版)上运行过。
! b) |7 b4 |+ h3 x) O# @6 `   1、程序画面一闪而过
+ {/ N$ e' T$ u! h   #include 6 m) F0 G% s/ m% @
   int main(void) # E1 R9 [- `) d0 z" Q/ J6 V3 E' G; d
   {
/ Q: }+ G6 v! x! D+ C   int iSignal; /*定义变量表示信号灯的状态*/
" Y4 u( v1 @6 j   printf(“the Red Light is 0,the Green Light is 1\n”); /*输出提示信息*/
: {  J( Q0 {$ E2 F: I   scanf(“%d”,&iSignal); /*输入iSignal变量*/ $ l/ R: v  B/ I& B# E. h
   if(iSignal==1) /*使用if语句进行判断*/ , x5 ]( \7 z& P1 J1 }
   { & k% T7 ]2 Q, Z7 {7 u
   printf(“the Light is green,cars can run\n”); /*判断结果为真时输出*/ 9 \4 }9 w* Z7 ]. C
   }
/ a% o+ R( Q. J! K   if(iSignal==0) /*使用if语句进行判断*/
' o' y8 P! W4 ^$ r! V+ r   { % Q- ~2 a) R0 ^6 d; r( o/ A
   printf(“the Light is red,cars can’t run\n”); /*判断结果为真时输出*/ 9 o: m* z7 D8 e) P* o% q* o  t# ]
   }
% j. K- \5 Y; d& @: N$ l' U2 g$ _   return 0; 3 Z& [, H3 M' h0 y- a0 U
   } 6 Q, ^$ `( z( K' ]9 }' Y- }
  解析:在XP以上的系统用win-tc,dev-cpp等IDE编译运行此程序时,无论输入什么数字,结果都是一闪而过,因为程序执行完语句后就直接退出了。 ! C* t  \1 ^. M4 V1 w
  解决方案:这里有几个办法(1)
' T3 Z6 }* B$ ~& J& Z3 @2 |  在程序开头加上#include ( T4 ^1 E+ t0 ~4 V9 l2 [' k' A; ^
  然后在程序末尾加上system(“pause”); 9 |$ a7 Q+ B+ `. D/ q- W( ^9 e
  此方法仅适用于MS-DOS,windows,不适用于*nix等系统(2) 7 q7 C. H# C4 u6 X8 @6 p: X& m
  在需要暂停的地方加入一个或两个getchar();
* C: \: e/ b& t* v  这种方法,实质上并不是暂停程序,而是让程序等待用户输入若干个回车。但是效果和暂停是相同的。(3) 5 l+ q8 [! Y# Q2 [) _1 {) b
  在程序开头加上#include 4 Z* L7 R0 X9 j4 }/ v9 {
  在需要暂停的地方加入一个getch();,原理和上一种差不多。在win-tc里用得比较多。
回复

使用道具 举报

 楼主| 发表于 2012-8-2 08:51:16 | 显示全部楼层

2012年软件水平考试程序员辅导笔记之程序员C语言新人常见问题

   2、if,for,while的判断后直接跟; ; b- j1 P/ x, Y, T: b4 O* h
  例如: . [$ S( C/ T: K# D1 Z
   #include , X+ j! R$ t9 r) H0 R  Y
   int main(void)
+ A5 i3 ^! `2 [4 t# k   {
) E0 ~: @, E0 B% A& f   int a; , ~- I# i# Q6 V0 \$ o, d/ \
   scanf(“%d”,&a);
8 _. m7 ^* ]. u   if (a == 123);////错误,if(a == 123)后面不应加上;,而应该紧跟着
4 L% W6 w% K6 l0 M   ////{ printf();}代码
, S4 S+ f2 r, Q   { $ {: Q1 r: y( X
   printf(“ccc”); 1 Y& X9 F) z/ d. d0 ^
   }
2 N% B, ?- y1 W5 L' D- u/ S6 K6 s   else
) b* M8 o3 A; S0 [9 J   {
' w' U4 i5 `% x   printf(“ddd”);
: p% ]4 A$ S! l" W$ K, i9 {2 F/ H$ I   }
) ?6 W, J7 C& N$ B* `   getchar();
$ m$ G* }1 C8 L+ u   return 0; ; W9 F( T1 _% j4 G! U  q
   } ! j/ v. d: s4 ?8 E, l
   #include
0 ]' v- }- o) m: i+ X( s2 v* T4 {* A   int main(void)
" P6 a6 ?7 w( d3 H   { 1 q; ^7 _4 u5 X, \7 K" \
   int n,i;
( b# j* b& e# q! J) `+ }   printf(“please input a number>2:”); # p9 o& b9 Q; @9 `
   scanf(“%d”,&n);
. q, R3 c% h- E( U: Y: d8 S. u9 \% t   for(i=2;i
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-2 08:51:17 | 显示全部楼层

2012年软件水平考试程序员辅导笔记之程序员C语言新人常见问题

  例如: & g% d  a$ m/ K& z  z
   main() 8 y  u+ `: A1 {2 ]5 C
   { * P( L3 `- |( L% r9 ]1 T+ M7 f( h
   int a; . n, L% p% A' ?6 y
   scanf(“%d”,&a);
8 V8 \8 h- J0 \9 e2 H0 U2 s   printf(“input %d”, a);
2 M0 p% a  o$ A, n   }
6 W( }8 e1 d3 O! `# f  解析:这段程序没有带上头文件stdio.h。即漏写了#include 。如果仅有scanf,printf函数的话,stdio.h是可以省略并可以正确运行的,但是这是非常不好的习惯。而main()这种写法,C89标准勉强充许这种形式,C99标准是不允许的。而void main(),至今仍未有任何标准考虑接受它。但是有些编译器的确允许。当然,这种写法广为流行,应该和老谭的书关系非常大。
; j& G0 s+ H+ u1 Q3 ^" n/ H1 u) O8 |  解决方案:用到的头文件应该用include包含进去。main()函数应该写成int main(void)这种形式,在main()函数尾部加上return 0;即
1 l& Q' e+ ?' `; ]   #include
1 I% y! F' L; V! C7 X   int main(void)
# ~9 ?% O' L0 o) b: c   { " I6 }4 b7 D; b0 b3 e5 y' r
   int a;
- P2 k$ m0 i0 |. r0 e: g: M6 x   scanf(“%d”,&a); " J1 V8 [- h0 b- A3 v' e0 y) N
   printf(“input %d”, a); - _7 Q( R" Z; N2 z0 l# h: P
   return 0;    }
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-4 03:29 , Processed in 0.176556 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表