C语言易错笔记

scanf("%d %d",&a,&b);

%f代表float,%lf代表double,但是在printf中,float与double都用%f

在执行完分支中的最后一条语句之后,如果后面没有break,就会顺序执行到下面的case里面去,直到遇到break或者swith结束为止。例:
switch ( month )
{
case 1: printf(“January\n”); break;
case 2: printf(“February\n”); break;
case 3: printf(“March\n”); break;
case 4: printf(“April\n”); break;
case 5: printf(“May\n”); break;
case 6: printf(“June\n”); break;
case 7: printf(“July\n”); break;
case 8: printf(“August\n”); break;
case 9: printf(“September\n”); break;
case 10:printf(“October\n”); break;
case 11:printf(“November\n”); break;
case 12:printf(“December\n”); break;
}

do-while循环与while循环不同,是在进入循环时候不做检查,而是在执行完一轮循环体代码之后再来检查循环的条件是否满足。
do
{
<循环体语句>
}while(<循环条件>);

随机数需要头文件
#include<stdlib.h>
#include<time.h>
使用语句
srand(time(0));
int a = rand();
可以用rand()%100来确定随机数范围为0~100。

!在math.h头文件中可以用fabs(x);函数,表示x的绝对值。
!1e-8表示10的负八次方。

逆序
#include <stdio.h>
int main()
{
int x;
scanf("%d", &x);
int digit;
int ret = 0;

while ( x> 0 ) {
	digit = x%10;
	printf("%d", digit);
	ret = ret*10 + digit;
	// printf("x=%d,digit=%d,ret=%d\n", x, digit, ret);
	x /= 10;
}
 printf("%d", ret);

return 0;

}

如果固定次数,用for
如果必须执行一次,用do_while
其他情况用while

用多层循环跳到最外层的时候用break只能跳出一层,所以要用
{{{goto out;}}}
out:

%E或%e用来输出科学计数法

char类型在输入输出时候,用%c

m<n ? x : a+5 如果m<n的话,结果是x,否则结果为a+5

return停止函数的执行,并送回一个值。分两种
return;
return 表达式;

数组变量本身不能被赋值,要把一个数组所有元素交给另一个数组,必须采用遍历。

二维数组列数必须给出,行数可以省略。

const int* p1 = &i;与int const* p2 = &i一样,都是*p不能变,无法通过指针p修改i的值。
int *const p3 = &i是指指针p不可修改。

!!闰年 y%4000||y%40&&y%100!=0

!!int a=(int)malloc(n*sizeof(int));需要用到stdlib.h头文件
!!最后用free(a);
例(结构体):
scanf("%d",&n);
Book *book = (Book )malloc(nsizeof(Book));

字符串不要忘记结尾还有一个0,例如hello,在数组里,长度为6
C语言字符串是以字符数组的形态存在的,不能用运算符对字符串做运算,可以通过数组的方式遍历字符串

char* s = “Hello,world!”;
s是一个指针,初始化为指向一个字符串常量,试图对s所指的字符串做写入会导致严重的后果,如果需要修改字符串,应该用
数组 char s[] = “Hello,world!”;

char string[8];
scanf("%s",string);
printf("%s",string);
scanf读入一个单词(到空格、tab或回车为止)
scanf是不安全的,因为不知道要读入内容的长度
若scanf("%7s",string); 在%和s之间的数字表示最多允许读入的字符的数量,这个数字应该比数组的大小小一,这种情况下,不会再
依赖于空格回车之类的,而是到了满足的字符数量,直接开始读入下一个%s

!!gets(str)是读入一行,可以读入空格,遇到回车才结束。

!!用getchar、scanf输入字符的时候,输入字符后再用回车换行,回车符会对后面使用输入字符的函数造成影响。此时需要用getchar();把回车!!符吸收。
!!用gets输入字符串的时候,输入字符串再用回车换行,回车符不会对后面使用输入字符的函数造成影响。

!!while(scanf("%d",&n)!=EOF){}输入多组数据,遇到ctrl+z结束

单个字符的输入输出
int ch;
ch=getchar();
putchar(ch);

头文件string.h中
strlen(s); 返回字符串中的字符个数
strcmp(s1,s2); 若两者相等则返回0,若s1>s2则返回1,若s1<s2则返回-1
char dst=(char)malloc(strlen(src)+1);
strcpy(dst,src); 把src复制到dst
strcat(s1,s2); 把s2拷贝到s1后面,接成一个长的字符串并返回s1(但是需要注意s1必须具有足够的空间)

strncmp(s1,s2,n); 判断前n个的大小相等关系
strncpy(dst,src,n); 将src前n个复制到dst
strncat(s1,s2,n); 将s2前n个拷贝到s1后面,接成一个长的字符串并返回s1

strchr(s1,c); 在字符串s1中寻找第一个字符c的位置并返回对应指针
strrchr(s1,c); 与上面一样,只不过是从右边开始查找
strstr(s1,s2); 在字符串s1中寻找字符串s2
strcasestr(s1,s2); 与上面一样,只不过忽略大小写

结构体
struct date{
int month;
int day;
int year;
};
struct date taday;
taday.month=07;

typedef struct ADate(可以省略){
int month:
int day;
int year;
}Date;
Date day;
day.month=07;

p1=(struct point){5,10}; //相当于p1.x=5;p1.y=10;
p1=p2; //相当于p1.x=p2.x;p1.y=p2.y

返回本地变量的地址是危险的,但是返回全局变量或静态本地变量的地址是安全的。
最好的办法是,返回传入的指针。

在printf中,%9d是指输出占据9个字符的空间,靠右对齐;%-9d是指靠左对齐;%09d中的0是指用0来填充;
%9.2f是指整个输出占据9个字符,并且小数点后面两个位置。

文件的输入输出
r 打开只读
r+ 打开读写。从文件头开始 (一般用来修改)
w 打开只写。如果不存在则新建,如果存在则清空
w+ 打开读写。如果不存在则新建,如果存在则清空
a 打开追加。如果不存在则新建,如果存在则从文件尾开始
…x 主要结合w和a使用。只新建,如果文件已存在,则不能打开

打开文件的标准代码
FILE *fp = fopen(“12.in”,“r”);
if(fp){
int num;
fscanf(fp,"%d",&num);
printf("%d",num);
fclose(fp);
}
else{
printf(“无法打开文件\n”);
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值