郑州网站优化排名,好的深圳网站页面设计,广州海珠区景点排行榜前十名,江西天亿建设有限公司网站目录 1. 标准输入输出头文件2. scanf2.1 scanf2.1.1 函数申明2.1.2 基本用法2.1.3 返回值2.1.4 占位符2.1.5 赋值忽略符 3. getchar3.1 函数申明3.2 基本用法 4. gets4.1 函数申明4.2 基本用法 1. 标准输入输出头文件
#include stdio.h在使用标准输入输出函数的时候都… 目录 1. 标准输入输出头文件2. scanf2.1 scanf2.1.1 函数申明2.1.2 基本用法2.1.3 返回值2.1.4 占位符2.1.5 赋值忽略符 3. getchar3.1 函数申明3.2 基本用法 4. gets4.1 函数申明4.2 基本用法 1. 标准输入输出头文件
#include stdio.h在使用标准输入输出函数的时候都要包含头文件否则会编译错误 2. scanf
2.1 scanf
2.1.1 函数申明
int scanf ( const char * format, ... );2.1.2 基本用法
scanf(%d, i);它的第⼀个参数是⼀个格式字符串里面会放置占位符告诉编译器如何解读用户的输入需要提取的数据是什么类型这是因为C语言的数据都是有类型的 scanf() 必须提前知道用户输入的数据类型才能处理数据它的其余参数就是存放用户输入的变量格式字符串里面有多少个占位符就有多少个变量。上面示例中 scanf() 的第⼀个参数 %d 表示用户输入的应该是⼀个整数。 %d 就是⼀个占位符 % 是占位符的标志 d 表示整数。第⼆个参数 i 表示将用户从键盘输入的整数存入量 i从函数的申明可以看到这里的参数应该是指针类型的所以在变量i之前应该要加数组则直接为数组名即可下⾯是⼀次将键盘输入读入多个变量的例子 scanf(%d%d%f%f, i, j, x, y);
printf(%d\n%d\n%f\n%f\n, i, j, x, y);上⾯示例中格式字符串 %d%d%f%f 表示用户输入的前两个是整数后两个是浮点数比如 1-20 3.4 -4.0e3 。这四个值依次放入 i 、 j 、 x 、 y 四个变量scanf() 处理数值占位符时会自动过滤空白字符包括空格、制表符、换行符等前提是scanf的参数中没有出现这些字符所以用户输入的数据之间有⼀个或多个空格不影响 scanf() 解读数据。另外用户使用回车键将输入分成几行也不影响解读如图 上面示例中用户分成四行输入得到的结果与⼀行输入是完全⼀样的。每次按下回车键以后scanf() 就会开始解读如果第⼀行匹配第⼀个占位符那么下次按下回车键时就会从第⼆个占位符开始解读scanf() 处理用户输入的原理是用户的输入先放入缓存等到按下回车键后按照占位符对缓存进行解读解读用户输入时会从上⼀次解读遗留的第⼀个字符开始直到读完缓存或者遇到第⼀个不符合条件的字符为止 #include stdio.h
int main()
{int x;float y;// ⽤⼾输⼊ -13.45e12# 0scanf(%d, x);printf(%d\n, x);scanf(%f, y);printf(%f\n, y);return 0;
}运行结果如下 上⾯示例中 scanf() 读取用户输入时 %d 占位符会忽略起首的空格从 - 处开始获取数据读取到 -13 停下来因为后面的 . 不属于整数的有效字符。这就是说占位符 %d 会读到 -13第⼆次调用 scanf() 时就会从上⼀次停止解读的地方继续往下读取。这⼀次读取的首字符是 . 由于对应的占位符是 %f 会读取到 .45e12 这是采用科学计数法的浮点数格式。后面的# 不属于浮点数的有效字符所以会停在这⾥由于 scanf() 可以连续处理多个占位符所以上面的例子也可以写成下面这样 #include stdio.h
int main()
{int x;float y;// ⽤⼾输⼊ -13.45e12# 0scanf(%d%f, x, y);return 0;
}2.1.3 返回值 scanf() 的返回值是⼀个整数表示成功读取的变量个数如果没有读取任何项或者匹配失败则返回 0 。如果在成功读取任何数据之前发生了读取错误或者遇到读取到文件结尾则返回常量EOF #include stdio.h
int main()
{int a 0;int b 0;float f 0.0f;int r scanf(%d %d %f, a, b, f);printf(a%d b%d f%f\n, a, b, f);printf(r %d\n, r);return 0;
}输入输出测试 如果输入2个数后按 ctrlz 提前结束输入 在VS环境中按3次 ctrlz 才结束了输入我们可以看到r是2表示正确读取了2个数值。如果⼀个数字都不输入直接按3次 ctrlz ,输出的r是-1也就是EOF 2.1.4 占位符 上⾯所有占位符之中除了 %c 以外都会自动忽略起首的空白字符。 %c 不忽略空白字符总是返回当前第⼀个字符无论该字符是否为空格如果要强制跳过字符前的空白字符可以写成 scanf( %c, ch) 即 %c 前加上⼀个空格表示跳过零个或多个空白字符面要特别说⼀下占位符 %s 它其实不能简单地等同于字符串。它的规则是从当前第⼀个非空白字符开始读起直到遇到空白字符即空格、换行符、制表符等为止因为 %s 不会包含空白字符所以无法用来读取多个单词除非多个 %s ⼀起使用。这也意味着scanf() 不适合读取可能包含空格的字符串比如书名或歌曲名。另外 scanf() 遇到 %s 占位符会在字符串变量末尾存储⼀个空字符 \0scanf() 将字符串读入字符数组时不会检测字符串是否超过了数组长度。所以储存字符串时很可能会超过数组的边界导致预想不到的结果。为了防止这种情况使⽤ %s 占位符时应该指定读入字符串的最长长度即写成 %[m]s 其中的 [m] 是⼀个整数表示读取字符串的最大长度后面的字符将被丢弃 #include stdio.h
int main()
{char name[11];scanf(%10s, name);printf(%s, name);return 0;
}上⾯示例中 name 是⼀个长度为11的字符数组 scanf() 的占位符 %10s 表示最多读取用户输入的10个字符后⾯的字符将被丢弃这样就不会有数组溢出的风险了 2.1.5 赋值忽略符 有时用户的输入可能不符合预定的格式。 #include stdio.h
int main()
{int year 0;int month 0;int day 0;scanf(%d-%d-%d, year, month, day);printf(%d %d %d\n, year, month, day);return 0;
}上面示例中如果用户输入 2020-01-01 就会正确解读出年、月、日。问题是用户可能输入其他格式比如 2020/01/01 这种情况下 scanf() 解析数据就会失败为了避免这种情况 scanf() 提供了⼀个赋值忽略符assignment suppression character * 。只要把 * 加在任何占位符的百分号后⾯该占位符就不会返回值解析后将被丢弃 #include stdio.h
int main()
{int year 0;int month 0;int day 0;scanf(%d%*c%d%*c%d, year, month, day);printf(%d %d %d, year, month, day)return 0;
}上面示例中 %* c 就是在占位符的百分号后⾯加入了赋值忽略符 * 表示这个占位符没有对应的变量解读后不必返回。 3. getchar
3.1 函数申明
int getchar ( void );3.2 基本用法 getchar函数从屏幕读取下一个可用的字符并把它返回为一个十进制整数字符对应的ascll码。这个函数在同一个时间内只会读取一个单一的字符 #include stdio.h
int main()
{int c getchar();//输入“ abcd”printf(%d\n, c);return 0;
}从这里我们可以知道空格的ascll码是32 4. gets
4.1 函数申明
char * gets ( char * str );4.2 基本用法 这个函数很简单只有一个参数。参数类型为 char* 型即 str 可以是一个字符指针变量名也可以是一个字符数组名这个函数的返回值为输入参数的指针 # include stdio.h
int main(void)
{char str[20] 0; //字符数组初始化0printf(请输入字符串);char* p gets(str);printf(%s\n, str);printf(%p\n, p);printf(%p\n, str);return 0;
}运行结果为 最后 恭喜你又遥遥领先了别人