DHU OJ | 基本练习-14 字母的前趋或后继

27 篇文章 1 订阅

14 字母的前趋或后继

作者: 赵炜琦时间限制: 1S章节: 分支结构

问题描述 :

输入一个小写英文字母。如果这个字母是英文字母表的前13个字母中的一个(m字母及m以前的字母),则输出它的后一个字母;否则输出它的前一个字母。

输入说明 :

你的程序需要从标准输入设备(通常为键盘)中读入多组测试数据。每组输入数据占一行,由一个小写字母组成。在行首和行尾没有多余的空格。

输出说明 :

对每组测试数据,你的程序需要向标准输出设备(通常为启动该程序的文本终端)依次输出一组对应的答案。对应每一个输入的小写字母,输出它对应的前趋或后继字母,每行一个。在所有数据前后不要输出多余的空行,两组数据之间也不要输出多余的空行。

输入范例 :

a
m
n
y

输出范例 :

b
n
m
x
 

笔记

这道题的题干和第八题相同,主要考察的是字符的多点输入。

这道题要求从键盘读入,若直接使用scanf("%c",&c)会出现PE,用scanf("%c\n",&c)也是不行的。

stdin具有缓存区,当你键盘输入的字符还没有按下ENTER键时都是存在缓存区中的,当按下ENTER后,开始读取缓存区,这时才会有你输入的字符c与ENTER(ENTER在ASCII码中值为10)。

若用scanf("%c",&c)进行读入,输入时敲的回车键也会被读进去。

百度知道建议在输出时使用fflush清空缓存,但这是不被OJ允许的:

WA:测试数据运行错误。注意:有两种情况可能导致自己运行程序时正确但OJ系统给出错误结果:

1、如果在程序中使用了fflush函数清空输入,可能导致WA。

2、如果是输入字符串,OJ系统的测试数据最后一行后面不一定有换行符,但我们在键盘上输入时每一行后面都必然有换行符。所以,要当心这个区别。

那怎么办呢?

只能使用getchar(),每次仅输入一个字符。但这么做仍然会把键盘输入的回车符读进来。

解决方法很简单,即加一个判断,若输入字符的为回车符,则什么也不做。

输出的时候用printf()和putchar()都可以,但需要注意的是,若使用putchar()进行输出,还要在末尾加个换行。

代码

#include<stdio.h>

int main(){
	int c;
	
	c = getchar();
	while( c != EOF) {
		if(c!=10){
			if(c>='a' && c<='m'){
//				putchar(c+1);
				printf("%c\n",c+1);
			}
			else{
//				putchar(c-1);
				printf("%c\n",c-1);
			}
		}
		
		
		c = getchar();
	} 
		
	return 0;
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值