C错题练习

1、strlen()函数:求字符串的长度,不包括“\0”

strlen()所做的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串的开头,中间某个位置等)开始扫描,直到碰到第一个字符串结束符“\0”为止,然后返回计数器值(长度不包含'\0')。

原型:unsigned int strlen(char *s);

如果只定义没有赋给初值,这个结果是不定的,它会从首地址一直找下去,直到遇到"\0"停止。例子如下:

#include 
using namespace std;
int main()
{
	char p[]={'a','b','c'},q[10]={'a','b','c'};
	printf("%d %d\n",strlen(p),strlen(q));
        //由于p数组中没有字符串结束符,长度不能确定,q数组中字符串长度为3,未赋值的默认是0
	for(int i=0;i<10;++i)
	{
		cout<<(int)p[i]<<'\t'<<(int)q[i]<
输出:

C错题练习_第1张图片

2、strcmp()函数:字符串比较

原型:int  strcmp(const char *s1, const char * s2);

如果s1 == s2,则返回0.

如果s1 < s2,则返回负数。

如果s1 > s2,则返回正数。

#include 
using namespace std;
void f(char *p[],int n)
{
	char *t;
	int i,j;
	for(i=0;i0)
			{
				t = p[i];
				p[i] = p[j];
				p[j] = t;
			}
}
int main()
{
	char *p[5] = {"abc","aabdfg","abbd","dcdbe","cd"};
	f(p,5);
	printf("strlen(p[1]) = %d\n",strlen(p[1]));
	for(int i = 0;i<5;i++)
	{
		puts(p[i]);
	}
	system("pause");
	return 0;
}
输出:

C错题练习_第2张图片

3、switch()语句

没有满足条件的情况时,执行default语句。

有满足条件的情况,但是没有加break,则后面的语句继续执行。

int main()
{
	int k = 5,n = 0;
	while(k>0)
	{
		switch(k)
		{
		default:break;
		case 1:n+=k;
		case 2:
		case 3:
			n+=k;
		}
		k--;
	}
	printf("%d\n",n);//输出7
	/*
		第一次k=5,进入while,switch,不满足执行break跳出switch语句,k--后,k=4.
		第二次k=4,k>0,进入while,switch不满足,break,k--,k=3.
		第三次k=3,k>0,进入while,switch满足n=n+k;n==3;k--,k=2;
		第四次k=2,k>0,进入while,switch中case 2无break语句,接着执行后续语句,n=3+2=5,k--,k=1.
		第五次k=1,k>0,进入while,switch中case 1满足无break语句,n=5+1=6,n=6+1=7,k--,k=0.
		第六次k=0,k>0不满足,跳出while循环。
	*/
	system("pause");
	return 0;
}

4、gets(),getchar()

gets():从标准输入设备读取字符串(多个字符)的函数,可以无限读取,不会判断上限,以回车结束读取,所以要确保buffer的空间足够大,以便不会发生溢出。

原型:char * gets(char * str);

功能:从stdio流中读取字符串,直至接收到换行符或EOF时停止,并将读取的结果存放在str指针指向的字符数组中。换行符不作为读取串中的内容,读取的换行符被转换为"\0"空字符,并由此来结束字符串。

char s[100];  gets(s);

gets(s)函数与scanf("%s",s);相似,但不完全相同,使用scanf("%s",s)函数输入字符串时存在一个问题,就是如果输入了空格会认为字符串结束,空格后的字符将作为下一个输入项处理,但gets()函数将接收输入的整个字符串直到遇到换行为止

也就是说:gets()函数读取到\n(我们输入的回车)于是停止读取,但是它不会把\n包含到字符串里面去。然而,和它配合使用的puts()函数,却在输出字符串的时候自动换行。

getchar():从标准输入里读取下一个字符,相当于getc(stdin)。返回类型为int型,为用户输入的ASCII码或EOF。

getchar()由宏实现:#define getchar() getc(stdin). getchar有一个int型的返回值。当程序调用getchar时,程序就等着用户按键,用户输入的字符被存放在键盘缓冲区中,直到用户按回车为止(回车字符也放在缓冲区中)。当用户键入回车之后,getchar()才开始从stdio流中每次读入一个字符。如果用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar()调用读取。也就是说,后续的getchar()调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完后,才等待用户按键。

用法:可以利用getchar()函数让程序调试运行结束后等待程序员按下键盘后才返回编辑界面。在主函数结尾,return 0;之前加上getchar();当然也可加system("pause");可以产生同样的效果(限windows)。

getch():与getchar基本功能相同,差别是getch直接从键盘获取键值,不等待用户按回车,只要用户按一个键,getch就立刻返回(非缓冲输入函数),getch的返回值是用户输入字符的ASCII码,出错返回-1. 常用于程序调试中,在调试时,在关键位置显示有关的结果以待查看,然后用getch函数暂停程序运行,当按任意键后程序继续运行。

你可能感兴趣的:(C语言)