c语言中(c=getchar())!=EOF与c=getchar()!=EOF的区别?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言中(c=getchar())!=EOF与c=getchar()!=EOF的区别?相关的知识,希望对你有一定的参考价值。

两者怎么差别这么大,图1是前者 解释一下

区别在于c=getchar()!=EOF是先将从设备获得的字符与EOF进行比较,然后将比较的结果赋值给c变量。而(c=getchar())!=EOF是先将获得的字符赋值给变量c,然后再与EOF比较。
出现这种区别的原因是不等于!=的优先级高于赋值运算符=的优先级。
参考技术A (c=getchar())!=EOF先读取一个字符给c,再判断c是否不等于EOF。而c=getchar()!=EOF是先将读取的字符与EOF做判断,看是否不等于EOF,再将判断结果(只可能是0或1)赋值给c。本回答被提问者和网友采纳

C语言----操作和注意点(待补充)

操作

~scanf()和scanf()!=EOF效果相同

scanf的返回值是输入值的个数
如果没有输入值就是返回-1
-1按位取反结果是0
EOF值为-1


数组传参习惯加上断言 assert(arr)
头文件<assert.h>


使用getchar()清除缓冲区
getchar()读取到EOF就结束读取(CTRL+Z)相当于EOF
输入函数是从缓冲区去拿,键盘输入缓冲区


srand((unsigned int)time(NULL));
printf("%d",rand()%100);
必须放到主函数
打印0-99的随机数(任何数%100都是0-99的数)


printf("%*.*s\\n",m,n,ch);
前边的*定义的是总的宽度,后边的定义的是输出的个数。分别对应外面的参数m和n 。
这种方法的好处是可以在语句之外对参数m和n赋值,从而控制输出格式。


注意点

静态区static,全局3点作用

  1. 静态全局变量只能在本变量的源文件中使用
  2. 存储在静态数据区的变量(全局变量静态变量)会在程序刚开始运行时就完成初始化,也是唯一的一次初始化,下图为例子
    在这里插入图片描述
  3. 在静态数据区,内存中所有的字节默认值都是0x00
    在这里插入图片描述

以上是关于c语言中(c=getchar())!=EOF与c=getchar()!=EOF的区别?的主要内容,如果未能解决你的问题,请参考以下文章

基于C语言EOF与getchar()的使用详解

C语言中getchar()怎么用?

c语言中的getch与getchar 有啥区别?

23)C语言之getchar()以及缓冲区

c语言getchar的用法

getchar()与文件结束符EOF