目录
10.2.1 单字符的输入输出
putchar
int putchar(int c); 输出的不是char类型而是int类型,但是不能接收4字符
向标准输出写一个字符(在标准输出里输出一个字符)
返回写了几个字符,EOF(-1)表示写失败,返回1为正常
getchar
int getchar(void);
从标准输入读入一个字符
返回其读到的字符。返回类型也是int,这是为了返回EOF(-1),来表示输入结束。我们来解释一下
#include<stdio.h>
int main(int argc,char const *argv[])
{
int ch;
while((ch = getchar()) != EOF)
{
putchar(ch);
}
printf("EOF\n");
return 0;
}
(Mac上是CtrlD,而Windows是CtrlZ)
而既然getchar只读一个字符,我们输入一个字符之后它并没有自动终止读入,而是在用户按下回车之后才终止。
原因如图:
在我们的程序和我们输入与屏幕之间有shell代为处理数据,用户输入之后,shell会将输入的内容填入缓冲区,然后进行行编辑处理。shell把缓冲区里的东西输进程序。
输入的数据会在不同程序下对其进行不同的处理。其中的CtrlC会让shell直接关闭程序,而CtrlD在shell收到后,在末尾填一个-1,程序读到-1,程序就正常结束了。遇到\0,则等待用户继续输入,因此程序并不会停止读入。
string.h
strlen
size_t strlen (const char *s):可以返回s的字符串长度(不算结尾的0,sizeof会计算0)。
里边的const表示这不会对字符串进行任何更改。
#include<stdio.h>
#include<string.h>
int main(int argv,char const *argv[])
{
char a[] = "Hello";
printf("strlen = %lu\n",strlen(s));
printf("sizeof = %lu\n",sizeof(s));
return 0;
}
这个函数是怎么实现的?我们来写一个替代函数试一下!
strlen代替函数
#include<stdio.h>
#include<string.h>
//遍历数组,当数组元素为0时表示结束,用下标代替元素个数,得到字符串长度
size_t mylen(const char* s)
{
int index = 0;
while(s[index] != '\0')
{
index++;
}
return index;
}
int main(int argv,char const *argv[])
{
char a[] = "Hello";
printf("strlen = %lu\n",mylen(a));
printf("sizeof = %lu\n",sizeof(a));