【C语言】一些初学易犯的小错集合
刚学c的时候,照着书里和网上扒下来的程序写都能运出一堆errors,
按F4找错,找一节课看不出来错哪。
记录一下曾犯过一些憨憨的小错误:
1.main()->mian()
把main()函数打成mian()
(不知道到底是我舍友太爱吃面会犯这个错还是大家都会手滑
当然不止是main函数,还有其他的函数也会有手误的时候,
有时候找不到错可以看看单词有没有拼错
2.scanf()的正确输入方式
scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘)读取输入的信息。可以读入任何固有类型的数据并自动把数值变换成适当的机内格式。
有没有在用scanf()输入的时候发现输完数字按回车不会进行下一步,亦或者算出来结果是错误的。
那是因为输入方式错了(记得把输入法切英文)
上代码:
#include <stdio.h>
int main()
{
int a,b;
printf("请输入两个整数:\n");
scanf("%d%d", &a, &b);
printf("%d,%d\n",a,b);
return 0;
}
来看看三种输入方式会产生的结果:
①输入:4□5↙
②输入:4↙5↙
③输入:4,5↙
呜呼结果出错啦!
其实"%d%d"是按十进值格式输入两个数值。
输入时,在两个数据之间可以用一个或多个空格、tab键、回车键分隔。
那什么时候可以用","呢?
这种时候:
#include <stdio.h>
int main()
{
int a,b;
printf("请输入两个整数:\n");
scanf("%d,%d", &a, &b);
printf("%d,%d\n",a,b);
return 0;
}
看看结果:
其实4,□5↙或者4,□□□5,↙都合法,但是 ","一定要跟在数字后面!
真要仔细学习这个函数建议搜详细资料,有许许多多的“坑”,这里写一点遇到过的:
1、sacnf()中的变量必须使用地址。
scanf("%d%d",a,b); //错误
scanf("%d%d",&a,&b);//正确
2、scanf()的格式控制串可以使用其它非空白字符,但在输入时必须输入这些字符。
scanf(“a=%d,b=%d”,&a,&b); //输入: a=4,b=5↙3、在用"%c"输入字符时,空格和“转义字符”都会被输入。 scanf("%c%c%c",&c1,&c2,&c3); //输入:a□b□c↙
结果:a赋给c1,□赋给c2,b赋给c3 (其余被丢弃)
许许多多多多的数据类型
刚学C的时候确实记不住那么多数据类型,以及它们的格式化输出分别是什么,有时候就会用混、用错。多用用就熟悉了,解决方法就四个大字:
多敲代码!
还是要有疑惑的,比如:
- 为什么有这么多的类型?
- 每种类型的大小是多少?
存在这么多的类型其实是为了更加丰富的表达生活中的各种值。
数据类型--------------------------------------------------------------对应的格式化输出
char //字符数据类型 ---------------------------------------------------%c
short // 短整型-----------------------------------------------------------%d
int // 整型------------------------------------------------------------------%d
long // 长整型-------------------------------------------------------------%ld
long long // 更长的整型-------------------------------------------------%lld
float // 单精度浮点数(保留小数点后六位--------------------------%f
double //双精度浮点数---------------------------------------------------%lf
//ps:%s是字符串的格式化输出,但字符串不是数据类型哟
那类型的大小是多少呢?(此时的“大小”——>“字节”)
字节是什么?
先引入三个词:
字 word
字节 byte
位 bit
1字节=8位(1 byte = 8bit)
1字=2字节(1 word = 2 byte)
字长是指字的长度
一个字节的字长是8
一个字的字长为16
天哪我快要不认识“字”这个字了
再来点计算机小知识:
bps 是 bits per second 的简称。一般数据机及网络通讯的传输速率都是以「bps」为单位。如56Kbps、100.0Mbps 等等。
Bps 即是Byte per second 的简称。而电脑一般都以Bps 显示速度,如1Mbps 大约等同 128 KBps。
bit 是电脑记忆体中最小的单位,在二进位电脑系统中,每一bit 可以代表0 或 1 的数位讯号。
Byte 一个Byte由8 bits所组成,可代表一个字元、或符号,是记忆体储存资料的基本单位,每个中文字要两Bytes。当记忆体容量过大时,位元组这个单位就不够用,因此就有千位元组的单位KB出现。
最重要的转换来了:
1 Byte = 8 Bits
1 KB = 1024 Bytes
1 MB = 1024 KB
1 GB = 1024 MB
普及完知识再来看看“每种类型的大小是多少?”
#include <stdio.h>
int main()
{
printf("%d\n",sizeof(char));//1
printf("%d\n",sizeof(short));//2
printf("%d\n",sizeof(int));//4
printf("%d\n",sizeof(long));//4
printf("%d\n",sizeof(long long));//8
printf("%d\n",sizeof(float));//4
printf("%d\n",sizeof(double));//8
return 0;
}
ps:sizeof()是求字节大小的函数,此时的输出就是每种类型的大小。
pps:无论在Windows32位还是64位平台下它们的大小不会改变,
但是!在16位下 int 为2个字节,在Linux中64位下 long 为8个字节。
END
本来想写几个错误小点结果又啰嗦了一堆。
但是!
知识还是知道的越多越好不是吗?