C/C++新手看过来----讨厌的符号

      新手第一个容易出问题的地方就是各种符号的使用,就像英语中各种发音一样,在刚学的时候是痛苦的,容易混淆,导致错误使用,出现各种当下看来是“奇异”的结果,在水平相当的同学中,得不到解决,导致苦恼、迷茫和自我否定。其实大可不必如此。

      任何一项知识的学习都不可能一蹴而就,因此也不要一时的挫折而全盘否定。大部分学习只需要坚持,都会有领悟的时候。相信计算机语言的学习不会需要多长时间。

      这里就新手提问中出现频率较高的和符号相关的问题进行一下分析和解决。希望对刚进入程序员道路的朋友们有所帮助。

1、讨厌的逗号

(1)scanf中的逗号

scanf作为C语言的输入语句,在学习阶段,使用频率很高。此处不讲占位符的问题,后面章节会讨论。只说多个占位符之间的分隔符问题。

scanf默认分隔符是空格和换行符,逗号不是默认分隔符。当输入非默认分隔符时,要求scanf函数的第一个字符串参数中,也必须在相应位置有该字符存在,否则scanf就会识别错误,导致后续的输入项全部错位。

比如scanf(“%d,%d”,&a,&b);

那么你输入时,必须是10,20这样子。输入10 20的话,只有a变量输入了值,b变量会是一个垃圾值。

所以,如果你在scanf中,占位符之间加了逗号,请在输入时也一定要输入逗号。

 (2)逗号表达式

新手使用逗号表达式不会很多,除非正好学到这个知识点,会出几道题测验一下。逗号表达式从左往右逐个计算各个表达式,整个表达式的值为最后一个表达式的值。

比如:int a=2,b;

         b = (a++,++a); (注意这里一定要加括号,想一想为什么,不加括号结果会有什么变化呢?)

最终b的值是4。(思考一下为什么?)

比如还有逗号表达式使用不当的情况:

for(int i=0,j=0;i<5,j<10;i++,j++)

      …..

问题在于结束条件i<5,j<10上,根据上面的描述,逗号表达式的结果为最后一个表达式的结果,所以实际只有j<10时,for循环才会结束,而i<5实际是没有意义的代码。

2、讨厌的分号

分号表示一个语句的结束。

分号经常用错的场景有:

(1)常量定义后面加分号

常量定义使用#define语句,为一个代码块定义一个别名。常量定义不管代码块和别名的语义,只管这是两坨字符而已。在编译期间就将代码中的别名替换为代码块进行编译,如此而已。

但不了解的时候,容易把常量定义和const定义的常变量混淆,在别名之后加上分号,作为一个语句结束。但如上所述,#define只是将后面的内容当做两堆字符,而分号也被认为是别名中的一个字符而已,导致编译时将分号插入了代码块,导致代码块分裂,出现编译错误。

比如: #define MAXSIZE 1000;

int a[MAXSIZE] = {0};

编译时将MAXSIZE用1000;进行了替换,实际代码成了:

int a[1000;] = {0};

所以要注意,#define后面一般是没有分号的,除非你想要替换的代码块最后就是个分号

(2)循环语句(还有判断语句)后面加分号

循环语句后面加分号,也有时候是正确代码。比如:

for(i=0;str[i] !=’\0’;i++); 这个空循环结束后,i就表示了字符串长度。

但大部分时候可能是错误使用,加分号后,后续的代码块就不是for循环的代码块了,所有逻辑就都错误了。比如:

for(int i=0;i<10;i++);

      printf(“%d”,i*i);

这样就会出现i是未定义的变量的错误提示了。

(3)函数实现后面加分号

 函数申明和函数实现都需要写函数定义,但区别是函数申明在函数定义之后直接是个分号结束,函数实现在函数定义后面是函数代码块。比如:

int fun(int n); 是函数实现

int fun(int n)

{

return n*100;

}

是函数实现。

但有时候会写混,在函数实现的时候,顺手在函数定义后加分号,后面又写了代码块。导致代码块不属于任何函数而报错。

3、讨厌的全角符号

新手还比较容易出问题的是代码中的符号写成了全角字符,特别是有些从网上复制下来的代码,很容易把符号搞成全角符号,导致编译报错,新手还不容易发现。

发现半角符号的方法:

一是错误提示中会有如\x357这种内容,表示某个符号是全角字符

二是有些编译器可以给符号设定不同的显示颜色,比如红色。那么全角字符编译器并不认为是字符,所以改变颜色,所以是可以发现的

三是有些编译器可以给全角字符加上波浪线提示。

      另外,在设置代码字体时,最好不要选择某些全角和半角字符很相似的字体。

     

      关于符号问题,就先说这么多,希望大家阅读后,可以不会在符号错误上耽误很多宝贵的学习时间。也欢迎补充更多的符号错误现象和解决方法。

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快乐鹦鹉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值