闲来无事,唯有看书以静心
1.1注释部分,一般人会用
**/*
statements
*/**
来注释,但是如果遇到这样的情况:
**/*
/*statements1;*/
statements2;
*/**
那么你想注释的愿望就有可能落空,你可以理解为-(-1)=1,注释重叠<->没有注释(这只是个人理解,不喜勿喷~~),也就是说:注释不可以嵌套!
***正确方法:*从逻辑上删除一段代码,使用
#if (0)
statements
#endif
这样,哪怕中间还有注释,也都没有关系了
补充:’//‘是单行注释,’//'是多行注释,出现的问题同样适用于单行注释
1.2
gets函数
#include
int main(void)
{
char str[30];
char *string = str; //一定要先将指针变量初始化
printf("请输入字符串:");
gets(string); //也可以写成gets(str);
printf("%s\n", string); //输出参数是已经定义好的“指针变量名”
return 0;
}
gets相当于是scanf()的升级版,而且还可以输入空格,使用起来十分方便,gets(string),相当于是让string这个字符串指针指向输入的内容
需要注意的是gets()函数自动清理留在缓冲区的回车键,所以不得不说,在学C++的string类前,gets(str)使用率还是很高的,而且也好用,puts(str)也是一样好用
1.3scanf和ch=getchar()
char* a;
while(1)
用scanf("%c",a)一个一个来读由于缓冲区里的’\n’自动读取,但是你明明还没输入…,下面的代码会直接导致错误
char *a;
while(1)
{
scanf("%c",a);
}
正确的操作
while((ch=getchar())!=EOF&&ch!='\n')
{
//action
}
我们除了可以使用ch=getchar()这类操作之外,还可以使用**fflush(stdin)**来清理缓冲区里的'\n',这样连续输入也不怕啦QVQ
1.4
**关于const* 和*const**
坦白说,我都不知道记这东西记了多少遍了,但是往往还是把他们搞混淆
const int*
const* int
int const*
关键在于'*'和'const'谁先谁后这个问题,如果const在前,'*'在后,我们可以理解为:p是一个指针,他指向的是const int类的数据,那么你自然不可以通过它来修改指向的数据了.同理:int* const p,理解为p是一个const,不可以再指向其他数据,只可以指向这一个(嘻嘻,王八瞅对眼了QwQ)
1.5这几个常用复制函数在不同的IDE上有的支持有的不支持
strcpy(a,b)
工业级复制,b赋给a
strncpy(a,b,num)赋给a,赋num个字节,注意自己还要加上’\0’,不然后果自负!
strncpy_s(a,size1,b,size2),相较于上面的函数,多了个size1,意思是说:把b的size2的字符赋给a,但是a只接收size1个字节,相当于是部分截取,部分接收,很好用,就是有些IDE不资瓷~~
补充:文件结束返回EOF,但是文件的末尾是NUL