(1)strcmp函数
的原型是:
int
strcmp(char
p1,char
p2)
{int
i=0;
while
((p1+i)==(p2+i))
if
((p1+i++)=='\0')
return
0;/
这里是先判断(p1+i)=='\0',然后再是i++
/
return
((p1+i)-(p2+i));
}
从上面代码可以看出:1两个字符串自左向右逐个
字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止。strcmp的返回值是一个整型数int,两个字符串相等返回值0,若不相等返回值是两个字符串从开始看起第一个不相等的字符的ASIC2值之差(前一个减去后一个)。
2
strcmp中的形参是两个指向字符串的指针变量。
//
strcmpc
#include
<syslibh>
#include
<stringh>
main()
{
char
s1="stop";
char
s2="stop";
int
r;
clrscr();
r=strcmp(s1,s2);
if(!r)
printf("s1
and
s2
are
identical");
else
if(r<0)
printf("s1
less
than
s2");
else
printf("s1
greater
than
s2");
getchar();
return
0;
}
(2)按照C字符串的定义,遇到\0结束符字符串就结束了,所以:
\t一个
\v一个
\一个
\0结束
答案是3
(3)
这是因为scanf()函数在不能接受空格
而这个函数又是以TAB键,回车符或空格作为结束符的
所以在输入aa
bb时,分别被前两个字符数组所接受
但是从第三个字符数级开始是用gets()函数来接受字符串的
在用户按下第一个回车键后,回车键被储存内存缓冲区中,等待用户的接受
又由于在下一个输入函数是gets(),因为这个函数在接受字符串时只以回车键作为它接受字符串的结束符,所以在输入cc
dd时,cc和dd中间的空格也被作字符存储到第四个字符数组中
在结果中空的一行,就是第三个字符数组输入的回车符,即换行符
楼主可以这样想,C语言中,无论是常量,变量,函数,只有先定义才能使用的。在函数定义时,大脑要往一般的常量,变量定义的方向,切忌先不要想函数的别的。定义好后,把函数的定义先放一边,不管它。
接着是函数声明,大家都知道,C语言是有一个主函数main()和0或n个普通函数组成的。由于当代码越长,用到的函数就越多,为了减少函数的混淆,所以要有个函数名,就像老师点名一样,声明一个函数,就如点一个学生的名字。
总之,函数定义是系统要求的,不定义就错误,而函数声明实际上不定义也行,但为了方便和减少错误,人为规定要声明。
++c可以看错c+1
而c++必须是当前语句执行晚后才把c+1,之前都是按照原来的c的值算得
至于这个当前语句执行完,也就是碰到 ' ; ' , ' } ' , ') '时
C语言的 *** 作符和一般的函数类似,只不过C语言的 *** 作符的参数是C语言内置的数据类型,例如sum = a+b, *** 作符'+'的 *** 作数就是a和b,如果一个函数add(int a,int b),那么它也实现了a和b做加法运算的功能,'a+b'这样的写法只是符合我们写数学表达式的习惯,编译器其实也就是将这样的表达式看做是函数,c++中'+(a,b)'这样写是和'a+b'等价的。
至于sizeof,因为c语言是强类型语言,任何变量在使用前必须定义,你定义一个变量的时候你就必须指定一个变量的基类型,编译器是知道这些基类型应该分配多少空间的,例如VC就将整型变量分配4个字节,例如int a;……sizeof(a);在语句int a;时编译器就知道了a是一个整型变量,再遇到sizeof(a)时很自然就知道a是用4个字节存储的啊。
1scanf不能接受空格、制表符Tab、回车等;对末尾回车符的处理:把回车符保留在缓存中。
gets能够接受空格、制表符Tab和回车等;对末尾回车符的处理:接收回车,但把回车替换为\0。
2scanf :当遇到回车,空格和tab键会自动在字符串后面添加'\0',但是回车,空格和tab键仍会留在输入的缓冲区中。
gets:可接受回车键之前输入的所有字符,并用'\n'替代 '\0'回车键不会留在输入缓冲区中
3gets从标准输入设备读字符串函数,其可以无限读取,不会判断上限,以回车结束读取,所以程序员应该确保buffer的空间足够大,以便在执行读 *** 作时不发生溢出。scanf()可以读取所有类型的变量。 扩展资料:
注意问题
(1)在高版本的 Visual Studio 编译器中,scanf 被认为是不安全的,被弃用,应当使用scanf_s代替 scanf。
(2) 对于字符串数组或字符串指针变量,由于数组名可以转换为数组和指针变量名本身就是地址,因此使用scanf()函数时,不需要在它们前面加上"&" *** 作符。
(3) 可以在格式化字符串中的"%"各格式化规定符之间加入一个整数,表示任何读 *** 作中的最大位数。
(4) scanf函数中没有类似printf的精度控制。
(5) scanf中要求给出变量地址,如给出变量名则会出错
(6) 在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔,则可用空格,TAB或回车作间隔。
(7) 在输入字符数据(%c)时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符。 参考资料:
-scanf
-gets标识符就是由字母、数字以及"_"(下划线)所组成的标志。标识符的第一个字符必须是字母或者下划线。大多数C编译器中,大小写字母是不同的,
标识符用于向程序中的对象提供唯一的名称
*** 作符就是C中的许多具有特定含义的特殊字符,例如+、-等,
评论列表(0条)