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运行更快。

Last modification:September 22, 2022
如果觉得我的文章对你有用,请随意赞赏