c语言中getchar、putchar、以及scanf的了解

本文详细介绍了C语言中用于输入输出的函数,包括scanf用于从键盘读取变量值,getchar用于读取单个字符,以及putchar用于输出字符。文章通过实例演示了这三个函数的使用方法,特别强调了scanf在处理字符串输入时的注意事项,以及如何利用getchar清除缓冲区中的剩余字符。最后,提供了一个综合示例,展示了在处理用户输入和确认时如何避免输入的干扰。
摘要由CSDN通过智能技术生成

c语言中getchar、putchar、以及scanf的了解

scanf

scanf 的功能用一句话来概括就是“通过键盘给程序中的变量赋值”。
1) scanf(“输入控制符”, 输入参数);
举个例子:
输入控制符 说明
%a 读入一个浮点值(仅C99有效)
%A 同上
%c 读入一个字符
%d 读入十进制整数
%i 读入十进制,八进制,十六进制整数
%o 读入八进制整数
%x 读入十六进制整数
%X 同上
%c 读入一个字符
%s 读入一个字符串
%f 读入一个浮点数

#include<stdio.h>
int main()
{
	int n;
	scanf("%d", &n);//&n 表示变量n的地址  &是取地址符
	//还有,如果是字符,应该用
	//char n;
	//scanf("%c",&n);
	printf("%d", n);
	return 0;
}

scanf(“%s”)输入字符串时,空格、回车‘\n’作为结束。
例如

#include<stdio.h>
int main()
{
	char str[10];
	scanf("%s", str);//输入123 456
	printf("%s", str);//123,因为scanf(“%s”)输入字符串时,空格作为结束
	return 0;
}

getchar

C标准库提供的输入输出模型,都是按照字符流的方式处理. getchar ()是最简单的一次读一个字符的函数,每次调用时从文本流中读入下一个字符,并将其作为结果值返回。(回车键也算一个字符)
使用举例:

#include<stdio.h>
int main()
{
	char ret = getchar();//从键盘输入一个字符到ret中,如9 空格 回车
	printf("%c", ret);//9 空格 回车
	return 0;
}

putchar

putchar就是用来输出(显示到屏幕的)的。
putchar 的适用对象是字符数据。(从putchar名字末尾的 char 也可以看出。)一个putchar只能输出一个字符。
例如

#include<stdio.h>
int main()
{
	putchar('a');
	putchar('b');
	return 0;
}

在这里插入图片描述

综合例子

#include<stdio.h>
int main()
{
	int ret = 0;
	int ch = 0;
	char password[20];
	printf("请输入密码: ");
	scanf("%s", password);//12345667 回车(\n)
	printf("请确认(Y/N)");
	ret = getchar();//因为scanf遇到回车就结束状态,剩个\n被getchar,所以最终ret不是从键盘中得到的
	if (ret == 'Y')
	{
		printf("确认成功\n");
	}
	else
	{
		printf("放弃确认\n");
	}
	return 0;
}

在这里插入图片描述
修改后应该为

#include<stdio.h>
int main()
{
	int ret = 0;
	int ch = 0;
	char password[20];
	printf("请输入密码: ");
	scanf("%s", password);
	getchar();
	printf("请确认(Y/N)");
	ret = getchar();
	if (ret == 'Y')
	{
		printf("确认成功\n");
	}
	else
	{
		printf("放弃确认\n");
	}
	return 0;
}

在这里插入图片描述在面对中间有多个空格时(优化上面)

#include<stdio.h>
int main()
{
	int ret = 0;
	int ch = 0;
	char password[20];
	printf("请输入密码: ");
	scanf("%s", password);//123   345回车
	while ((getchar()) != '\n')//getchar了  345回车//保证到下面getchar这里没有剩其他的字符
	{
	;
	}
	printf("请确认(Y/N)");
	ret = getchar();
	if (ret == 'Y')
	{
		printf("确认成功\n");
	}
	else
	{
		printf("放弃确认\n");
	}
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值