今天是我学习C语言的第几天来着,忘记了,但是每天都有学我依然在坚持,但也希望我的坚持可以给我带来回报。我要继续加油了诸位。
正片
写(2)续篇的时候漏了一个scanf()函数忘记和大家分享了,今天跟大家分享一下。
scanf()函数
scanf()函数的用法就是读取用户键盘输入的内容。程序运行到这里就程序就会停下来等待用户的输入然后当用户按下回车后开始读取用户输入的内容进行处理。
语法格式如下:“%d”和printf()函数中的一样就是占位符的意思,另外scanf()函数中的i变量不需要赋初始值,其中i变量前面的&符号必须要加上,事实上scanf()中存储的i不是变量的值还是一个地址,这个地址指向的就是用户输入的值。
int i;
scanf("%d", &i);
scanf()函数也可以一此性输入多个值,不同的数据类型也可以同时输入,此外scanf()函数处理占位符是会自动的过滤空白的字符,包括空格,制表符,还有换行符,意思就是scanf()遇到这些情况的时候就会忽略它们知道读取到与占位符相对应的数据类型的数据,语法格式如下:
int i,t,r,y,w;
scanf("%d%d%s%f", &i,&t,&r,&y,&w);
scanf()是有他的返回值的返回值是只有整数,表示读取成功变量的个数。如果没有读取任何项的话,或者或者读取失败的话,返回的值就为0。如果在成功读取任何数据之前,发生读取错误或者读取到文件结尾,则返回常量EOF = -1.
int main()
{
int i,t;
float w;
printf("输入的值:\n");
int r = scanf("%d%d%f", &i,&t,&w);
printf("i = %d t = %d w = %f ", i, t, w);
printf("r = %d",r);
return 0;
}
在编译过程中ctrl+z可以结束输入,图一中输入了两个值没有输入第二个结果显示w的显示的值是很奇怪是因为我没有为w赋值所以系统随机赋的值,显示 r 为scanf()函数返回的值。图二和图一同理按了三下ctrl+z,r的值为-1,也就是EOF。
占位符
scanf()函数中的和printf()函数中的占位符是一样的可以参考启航篇(2)续http://t.csdnimg.cn/p1SLK
但是“%c”这个占位符不会忽略空白字符,总是返回第一个字符无论该字符是否为空格,如果要跳过空格需要在写成这样的形式“空格%d”这样就可以跳过多个或者零个空格。
“%s”这个占位符很特别因为它会从第一个非空白的的字符读起一直读到有空白字符,所以scanf()不适合读取包含空格的字符串,另外scanf()遇到%s占位符会在字符串变量的末尾存储一个\0,来结束读取。
有一种特殊的情况如果要讲字符串读入字符数组时,scanf()不会检测字符的长度,如果字符长度超过字符数组的范围,怎么办?为了防止这种情况,可以指定输入的字符串最大长度,写成:“%[m]s”,其中m是一个整数表示输入字符串的最大长度,超过这个最大的长度就会被丢弃。
char add[11];
scanf("10%s", add);
这样就只能输入10个字符了不会出现溢出的问题。
赋值忽略符
在输入的时候编写的代码的时候程序员是可以自己决定输入的格式。
如果格式不对就会读取失败,为了避免这种情况有一个赋值忽略符“*”可以解决这个问题只要把这个符号加到任何占位符的百分号前就会这个占位符就不会有返回值,就被丢弃了。
关于scanf() 函数我学到的就只有这些,欢迎大家的指错和补充。坚持坚持坚持再坚持........