getchar与putchar的用法
getchar一次只接收一个字符
#include<stdio.h> int main() { char ch = 0; while ((ch = getchar()) != '\n') { putchar(ch); } }
#include <stdio.h>
#define SPACE ' ' // SPACE表示一个空格字符int main()
{
char ch;ch = getchar(); // 读取一个字符
while(ch != '\n') // 当读取到的下一个字符不是换行符时(即一行未结束时)
{
if(ch == SPACE) // 留下空格
putchar(ch);
else
putchar(ch + 1); // 改变其他字符
ch = getchar(); // 获取下一个字符
}
putchar(ch); // 循环结束,读取的最后一个字符是'\n',打印换行符
return 0;
}
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
char password[20] = { 0 };
int ch = 0;
int ret = 0;
printf("请输入您的密码:");
scanf("%d", &password);
printf("请确认密码->Y/N\n");
while ((ch = getchar()) != '\n')//不断接收字符,直到接收到'\n'!= '\n',跳出循环
{
;//空语句不做任何事情
}
ret = getchar();//从键盘获取字符
if (ret == 'Y')
{
printf("密码正确\n");
}
else
{
printf("密码错误\n");
}
return 0;
}
gets与scanf输入字符串的方式也非常类似,但是有几个区别:
(1) gets的输入分割符只有回车,因此gets是能够读入空格的。如果输入为"hello world"时,上面程序的运行结果是"hello world"。而如果用scanf则只能输出hello
(2) 此外,scanf和gets对待缓冲区里的回车符也是完全不同的。scanf在读取非空白符之前会忽略回车,读取之后如果遇到空白字符会停止输入,将其留着缓冲区里;gets只要一遇到回车就输入结束,并把这个回车从缓冲区里移走。
(3) gets可以读取空回车,但是scanf不能。
例如输入为"\nhello\n",也就是说,先输入一个空行,然后在第二行输入"hello"并回车。scanf按照它的读取原理,把第一个’\n’作为空白符忽略掉,然后读取字符串"hello",遇到第二个’\n’时输入结束,但是第二个’\n’会被scanf残留在缓冲区里。scanf的输入结果是读入字符串"hello"。当用gets进行读取时,它遇到第一个’\n’,就找到了它的输入分隔符,停止继续输入,第一个’\n’被从缓冲区中读走了,缓冲区里剩下"
gets从标准输入设备读字符串函数。可以无限读取,不会判断上限,以回车结束读取,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。