第三十章:输入输出函数

本文探讨了C++程序中EOF字符的处理,输入输出的常见bug及解决方案,特别是在用户密码输入场景下如何正确读取并确认输入。通过示例代码展示了如何使用getchar()函数循环读取输入缓冲区,确保正确处理换行符,并过滤掉非数字字符,以增强程序的健壮性。
摘要由CSDN通过智能技术生成

在这里插入图片描述
EOF字符

int main(){
	int ch = 0;
	//ctrl+z
	//EOF,实际是文件结束符,也就是-1
	while (ch=getchar()!=EOF){
		putchar(ch);
	}
	return 0;

}

输入输出bug

#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>

int main(){
	int ret = 0;
	char password[20] = { 0 };
	printf("请输入密码:");
	scanf("%s",password);//只读走输入缓冲区的12345,没有读走\n
	printf("请确认Y/N");
	ret = getchar();//读走\n,直接进入放弃确认
	if (ret == 'Y'){
		printf("输入成功\n");
	}
	else{
		printf("放弃确认\n");
	}
	return 0;

}

改进密码输入

#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>

int main(){
	int ret = 0;
	int ch = 0;
	char password[20] = { 0 };
	printf("请输入密码:");
	scanf("%s",password);//只读走输入缓冲区的12345,没有读走\n。如果输入"123456 xyz\n",还是会出问题,scanf只会读取空格前的字符输入缓冲区剩下" xyz\n"
	while (ch=getchar()!='\n'){//解决方案:getchar循环读取缓冲区的char字符,知道为\n往下执行
	
	}
	printf("请确认Y/N\n");
	ret = getchar();//这里才是正常获取用户输入

	if (ret == 'Y'){
		printf("输入成功\n");
	}
	else{
		printf("放弃确认\n");
	}
	return 0;

}

只接受数字字符

#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>

int main(){
	int ch = 0;
	while ((ch = getchar() )!= EOF){
		if (ch<'0' || ch>'9'){
			continue;
		}
		putchar(ch);
	}
	return 0;

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值