c语言问题
详解while((ch=getchar())!=‘\n’)
存在以下代码:
1 |
|
当我在键盘输入:forever
时并用回车结尾
显示屏上也会输出forever
这样的输出结果有一定原因:
- getchar()函数时会从缓冲标准输入流stdin里面取一个字符,而不是直接从键盘输入。
(ch=getchar())!='\n'
作为循环条件,即ch如果从stdin里面取到的字符不是回车,就继续从stdin再取。
C语言中定义int变量,默认值是多少?
区分变量的类型,有两种情况:
-
局部变量
局部变量在没有显示初始化时,其值C语言规范没做要求,可以是随机值
-
全局变量或静态局部变量
所有的全局变量,即定义在函数外的变量,默认值为0。
所有的静态局部变量,即定义在函数内部的(eg:static int a)形式的,默认值为0。
scanf()函数的定义
函数 scanf() 是从标准输入流stdio (标准输入设备,一般指向键盘)中读内容的通用子程序,可以说明的格式读入多个字符,并保存在对应地址的变量中。
定义二维数组时,为什么二维数组行可省列不可省
合法的二维数组定义:
1 | int array[][3]; |
不合法的二维数组定义:
1 | int array[3][] |
可以把二维数组看成是若干个等长的一维数组的集合,如果列数省略了,编译器就不知道你到底要定义几个、多长的一维数组的集合,所以列数不能省,对应的,如果行数省略了,编译器通过你指定的列数,可以对应的计算出二维数组的行数,自动帮你设置,所以行数是可以省的,列数是不能省的。
VS2019 C语言,在一个项目中添加多个包含main函数的源文件并分别调试运行
移除不使用的文件
VS2019如何调试C语言程序
-
按
F11
单步调试
为什么%f和%Lf出来结果的小数位数一样?
在c primer中写道:
有如下代码,在编译器输出时输出如下,于是我产生了疑问:
1 |
|
为什么%f
和%Lf
输出的小数位数一样呢?于是我更改了输出格式,
不同数据类型存储的小数的精度可以看出来了
scanf函数使用%d格式给char类型变量赋值
有如下代码:
1 |
|
输入65之后IDE报错:Run-Time Check Failure #2 - Stack around the variable 'c' was corrupted.
,大意是指访问的内存越界了。
问题解决:
把char
换成int
之后程序不再报错,应该是scanf函数把字符型变量c当成了整型赋值,而整型的内存空间是大于字符型的,所以导致内存访问越界。
getchar()函数和getch()函数的异同
当程序调用getchar时.程序就等着用户按键。用户输入的字符被存放在键盘缓冲区中。直到用户按回车为止(回车字符也放在缓冲区中)。
getch与getchar基本功能相同,差别是getch直接从键盘获取键值,不等待用户按回车,只要用户按一个键,getch就立刻返回,getch返回值是用户输入的ASCⅡ码,出错返回-1。
VisualStduio2019 C++如何重定向(用文件输入输出)
启动设置:
资源文件位置被指定了:
c语言优先级
优先级 | 运算符 | 结合律 |
---|---|---|
1 | 后缀运算符:[] () · -> ++ --(类型名称){列表} | 从左到右 |
2 | 一元运算符:++ – ! ~ + - * & sizeof_Alignof | 从右到左 |
3 | 类型转换运算符:(类型名称) | 从右到左 |
4 | 乘除法运算符:* / % | 从左到右 |
5 | 加减法运算符:+ - | 从左到右 |
6 | 移位运算符:<< >> | 从左到右 |
7 | 关系运算符:< <= > >= | 从左到右 |
8 | 相等运算符:== != | 从左到右 |
9 | 位运算符 AND:& | 从左到右 |
10 | 位运算符 XOR:^ | 从左到右 |
11 | 位运算符 OR:| | 从左到右 |
12 | 逻辑运算符 AND:&& | 从左到右 |
13 | 逻辑运算符 OR:|| | 从左到右 |
14 | 条件运算符:?: | 从右到左 |
15 | 赋值运算符: = += -= *= /= %= &= ^= |= <<= >>= | 从右到左 |
16 | 逗号运算符:, | 从左到右 |
scanf,printf输入输出float和double型数据
- printf的%f说明符既可以输出float型又可以输出double型。
- scanf对于float类型必须用%f,double必须用%lf
- 事实上,printf中没有定义%lf,但是很多系统可能会接受它。要确保可移植性,就要坚持使用%f。
在VS中添加命令行参数argv[]
菜单[项目] -> 属性页 -> 配置属性 -> 调试
在[命令行参数]里填上即可。