吉大機試題目 求字符串的反碼。 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讀不入空格,運行結果會丟失空格。