【无标题】getchar gets scanf

本文详细解释了C语言中的getchar和putchar用于逐个字符读写,以及scanf和gets用于字符串输入的用法,强调了它们的区别,包括输入分隔符、缓冲区处理和潜在的安全隐患。
摘要由CSDN通过智能技术生成

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的空间足够大,以便在执行读操作时不发生溢出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值