getchar获取单个字符
获取所有字符需要循环的方法
int main()
{
int ch = 0;
while ((ch = getchar()) != EOF)
{
putchar(ch);
}
return 0;
}
scanf与gets函数最大的区别在于:用gets可以输入带空格的字符串,用scanf不可以输入带空格的字符串。
#include<stdio.h>
int main()
{
char a[20] = { 0 };
scanf("%s", a);
printf("%s\n",a);
return 0;
}
输入a a返回
a
#include<stdio.h>
int main()
{
char a[20] = { 0 };
gets(a);
printf("%s\n",a);
return 0;
}
输入a a返回
a a
事实上,gets不仅能接收空格,还能接收Tab制表符;scanf则既不能接收空格,也不能接收Tab。
两者都是遇到回车就结束接收。
扩展
gets()函数
因为安全方面的原因,从C11起被废除了
gets函数不会再开始读字符串之前跳过空白字符(scanf会跳过)
gets函数会持续读入,直到找到换行符才停止(scanf函数会在任意空白字符处停止)
gets函数会忽略换行符,不会把它存储到数组中,并用空字符('\0')代替换行符
数组越界
把字符读入数组时,scanf函数和gets函数都无法检测数组合适被填满。当数组越界时,会导致未定义的行为。
可以使用%ns代替%s,数字n指出可以存储的最多字符数。
对比
getchar优点
getchar函数比scanf函数的执行速度更快
原因:
scanf函数是设计用来按不同的格式读不同类型数据的,getchar比scanf要简单的多
为了额外的速度提升,通常getchar函数是作为宏来实现的
scanf优点
相对与getchar可以更方便写入字符串
可以改变转换说明读取输入个类型的数据
1.printf()函数是格式化输出函数,书写格式为 printf("<格式化字符串>", <参量表>);
其中格式化字符串包括两部分内容: 一部分是正常字符, 这些字符将按原样输出; 另一部分是格式化规定字符, 以"%"开始, 后跟一个或几个规定字符,用来确定输出内容格式。
2.puts()函数用来向标准输出设备(屏幕)写字符串并换行。其调用格式为:puts(s); 其中s为字符串变量(字符串数组名或字符串指针)。相当于printf("%s\n",s);
puts()函数只能输出字符串,不能输出数值或进行格式变换。
printf显示更清晰,puts运行更快。