getchar 获取一个字符
可以用printf打印
也可以用putchar 打印
getchar 如果读取正常 会返回一个字符 如果遇到文件末尾返回EOF
int ch =getchar() ; 将getchar获取到的字符放在ch中
#define EOF (-1) 所以在接收getchar返回时 要用整形 如果用char类型 放不下一个负数
所以要用int 整形来接收
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int ch = 0;
while ((ch = getchar() )!= EOF)//getchar≠EOF 说明 读取到一个正常字符 进入下一步输出
{
putchar(ch);
}
return 0;
}
ctrl +z让 getchar 返回了一个EOF 程序结束
该函数(getchar)的作用 :清理缓冲区
例子: 判断密码正误
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
char password[20] = { 0 };
printf("请输入密码:");
scanf("%s", password);
getchar();//此时缓冲区有一个/n 在 必须用getchar 把这个/n清理掉
printf("请确认密码(Y/N)");
int ret = getchar();
if ('Y' == ret)
{
printf("密码正确\n");
}
else
{
printf("密码错误\n");
}
return 0;
}
scanf getchar 这类函数 并不是直接从键盘获取数据 而是从输入缓冲区
scanf 从缓冲区拿走了abcdef 到password 数组里 没有拿\n
getchar 把\n拿走了
若密码 存在空格时
password = 123456 abcdef\n
该代码又不能正常工作
因为scanf 将123456 读走 遇到空格不读取了
getchar 一次 读到了一个 空格
下面再进行getchar时 赋给ret 直接就不等于Y了 直接输出
所以我们要在中间用getchar 把缓冲区全部清理掉
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
char password[20] = { 0 };
printf("请输入密码:");
scanf("%s", password);
int ch = getchar();
while ((ch = getchar())!= '\n')
{
;
}
printf("请确认密码(Y/N)");
int ret = getchar();
if ('Y' == ret)
{
printf("密码正确\n");
}
else
{
printf("密码错误\n");
}
return 0;
}
C语言中单引号与双引号字符串区别
定义一个字符时用单引号
char c = 't' 将t的值赋给c c存储的是具体内容 而非 地址
双引号 char *str = "test";
将其赋值到str实际上是将 "test" 这个字符串数组的首地址赋给str。所以我们看到双引号括起来的字符串,可以直接将它看成一个地址。
单引号还可以用来 引用字符 双引号引用字符串