DHU OJ | 基本練習-14 字母的前趨或後繼

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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章