機試練習基礎題目,溫習知識(1) scanf 與 gets 的使用

吉大機試題目 求字符串的反碼。             http://ac.jobdu.com/problem.php?pid=1105 


一般會按照普通C語言的習慣,輸入用SCANF。但是,我們都忽略了,SCANF 對於空格,回車,TAB ,的處理是當做結束符的。回想很久前學習C語言輸入多個 變量時,中間會用 空格,老師會告訴我們,空格和回車都行。但是我們卻不知道 其中的原理是什麼。近日開始溫習編程基礎,一下手就出錯,想到了就寫下來。  


有多久沒寫技術博客,離開了 編程有多久,算一算吧,有一年半了,最近的編程還是在寫MATLAB。。剛開始上路就爲了其他事情丟下來。意識到時以晚,只能抓緊時間拼命彌補各個方面的不足。向世界默默地宣告一聲“I AM BACK!”

***********************************************************************************************************************************************************************************************************************************

功能:輸入字符串

格式: scanf("%s",s);

             gets(s);

注: s定義:   char s[N] 或者是 char * s

用法注意: scanf  ,輸入一個字符串後會自動添加'\0'  ;但是遇到 空格, 回車,製表符 會結束。

                     所以若要輸入空格,回車,要用gets();


代碼:


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

#define N 90

int main()
{
char s[N];
int i=0;

while(1)

{
  //scanf("%s",s);
gets(s);
if(s[0]=='!'&&strlen(s)==1) break;
i=0;
while(s[i]!='\0')
{
if(s[i]<=90&&s[i]>=65)
printf("%c",155-s[i]);
else if(s[i]<=122&&s[i]>=97)
printf("%c",97+122-s[i]);

else
printf("%c",s[i]);

i++;

}
printf("\n");
}
return 0;
}

這樣是正確的,可以處理空格,回車符。但是若用scanf會報PE的錯誤。就是在於,scanf讀不入空格,運行結果會丟失空格。





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