題目描述
實作字母的大小寫轉換,多組輸入輸出,
輸入描述:
多組輸入,每一行輸入大寫字母,
輸出描述:
針對每組輸入輸出對應的小寫字母,
示例1
輸入
A
B
輸出
a
b
思路:當看到這個題時,通過“大小寫轉換”可以立馬反應出,通過ASCII 碼進行轉換,即為:大寫字母+32=小寫字母,
即可初步有如下代碼的思路:
#include<stdio.h>
int main()
{
int ch=0;
ch=getchar();
putchar(ch+32);
return 0;
}
易得,如上的代碼是遠遠不足的,它只是一個大概的方向,上式代碼有一個缺點:它只能接收一個字符,不會再處理第二個,所有此代碼不滿足題意,
(強調!)這道題目要的是多組輸入,所以我們可以考慮采用while回圈!!!有了這個思路,我們可以對第一次代碼進行初步修改,可得如下代碼:
#include<stdio.h>
int main()
{
int ch=0;
while(ch=getchar())
{
putchar(ch+32);
}
return 0;
}
在編譯器中輸入上式代碼,對其進行編譯運行后,輸入A,得到如圖所示的情況:
依次輸入A,B,C 后情況如圖所示:
此時輸出的*,是怎么回事呢?
我們用到了getchar函式去接收字符,并且我們通過鍵盤進行 輸入,而 getchar與鍵盤之間有一個名為“輸入緩沖區”的部分,起初getchar看輸入緩沖區,內容為空,然后游標閃爍,等待從鍵盤輸入寫東西到輸入緩沖區,此時鍵盤敲一個 A ,此時字符‘A’并沒有送給getchar,也沒有進入輸入緩沖區,此時要按回車去觸發getchar去讀取字符,此時緩沖區中為'A'與'\n',相當于放入了兩個字符,而對于getchar一次只讀一個字符,即將'A'讀走,因為'A'不為0,所以'A'進入回圈,最后輸出a,之后getchar再次進行讀取,此時緩沖區中余'\n',將'\n'拿走,放入ch中,
通過查ASCII碼表可知,'\n'為10,而10+32=42,42對于的字符為'*',

getchar可以拿走A, getchar也可以拿走\n,
2.0實際版本的代碼:
#include<stdio.h>
int main()
{
int ch=0;
while(ch=getchar())
{
putchar(ch+32);
getchar();//讀取\n
}
return 0;
}
將上述代碼賦值到牛客網題目下,仍然會報錯:

此時可知上述代碼漏洞: 可以一直輸入,停不下來!!!無法讀取結束,
getchar函式回傳值描述: (補充資料)

代碼升級3.0,讓代碼可以停下來,不至于讓其死回圈:
#include<stdio.h>
int main()
{
int ch=0;
//EOF--end of file
while((ch=getchar())!=EOF)
{
putchar(ch+32);
printf("\n");//注意換行
getchar();//讀取\n
}
return 0;
}
HAPPY ENDING!!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/400480.html
標籤:其他
