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