咱們在以前的文章中,對於變量的賦值(初始化)都是直接寫在程序中的,那若是想從鍵盤輸入,怎麼作呢?我來介紹一個用於從鍵盤獲取輸入值的方法。windows
看到這個標題,是否是想起了什麼?對,咱們以前用的輸出函數Console.WriteLine()方法。今天咱們再介紹一下輸入函數。函數
猜猜怎麼用?好吧,我介紹一下用法:url
string s; s=Console.ReadLine(); Console.WriteLine(s);
從上面的例子中咱們能夠看出,Console.ReadLine()會從鍵盤讀取一個數,而且把結果賦值給s。是否是用法很簡單呢?讓咱們思考一個問題。spa
編寫一個程序,從鍵盤輸入兩個整數,而且輸出他們的和。code
哇,你寫出來了麼?是否是寫了相似的語句 int a=Console.ReadLine();執行時報錯了,錯誤列表告訴咱們:沒法將類型string隱式轉換爲int。這是神馬意思呢?blog
經過查資料(MSDN幫助文件的使用後文會講解)咱們發現,Console.ReadLine()的結果是字符串類型,即string。而咱們須要的是一個int整數,那咱們怎麼將string轉換成咱們須要的類型呢?下面咱們介紹轉換方法。ci
在這裏,咱們介紹兩種經常使用的轉換方式,一種是利用Convert轉換,一種是強制轉換(不是任何地方均可以強制轉換)。固然我會告你剛纔的錯誤中所說的隱式轉換是什麼東西。字符串
我先給出上面思考題的解決方法。get
string s1=Console.ReadLine(); int a1=Converrt.ToInt32(s); string s2=Console.ReadLine(); int a2=Converrt.ToInt32(s); int sum=a1+a2; Console.WriteLine(sum);
從上面的例子中能夠看出,我用的Convert.ToInt32()這樣的語句進行轉換爲int整數的,括號裏的是待轉換的變量,這個變量其實能夠不僅是string類型,能夠是任意類型(可能會出錯,後面講)。這樣的轉換是否是也是很簡單,那你猜猜轉換爲double類型怎麼作呢?不知道你猜到沒有,那就是Convert.ToDouble()方法。還有一個經常使用的方法就是Convert.ToBoolean();這個會將「true」或者「false」的字符串轉換爲bool類型的變量。咱們須要知道的就這三個。string
你可能會有疑問,爲何不介紹轉換爲string類型的方法呢。第一個是咱們輸入的直接就是string類型,並且任意類型都會自動(隱式)轉換爲string類型。並且你能夠明確的用方法轉換爲string類型,那就是Convert.ToString();
剛纔我說了,轉換過程當中可能會出錯,你能想到是什麼樣的錯誤麼?
例如我從鍵盤輸入了一個這樣的字符串「asdfbh23sdf562dfs」,你能將他轉換爲整數int類型嗎?貌似說不通,也作不到,除非你本身寫一個轉換方法(後面我們能夠嘗試一下)。還有一種狀況,我輸入的是數字,例如「123654132154561324564132」,這個要是轉換成int會出什麼樣的錯誤呢?前文我提到,每種變量類型是有範圍的,不是任意的值均可以,固然,這個字符串的範圍顯然超出了int類型的範圍,那固然會出錯嘍。至於這兩種問題(用戶致使的錯誤,而不是咱們寫程序的)怎麼解決,咱們之後在異常那裏會詳細說。
其實我不喜歡這種方式,會常常出錯,並且試用範圍小。方法就是在待轉換變量前加一個括號,括號裏寫目標類型,以下:
double a=6.568; int b=(int)a; Console.WriteLine(b); //結果是6,顯然精度丟失了,咱們有時候用這個方法取整數。前文提到過。
這個方法就簡單提一下。下面介紹一下顯式轉換和隱式轉換。
用個人理解來定義這兩種轉換的話,咱們明確指出的而且採用以上兩種方法的轉換就是顯式轉換。而程序本身默認轉換的就是隱式轉換。其實,咱們前面已經用了不少的隱式轉換,例如,兩個整數相除時咱們老是乘以0.1來讓結果變成double型。還有咱們經常使用的輸出方法,Console.WriteLine(),其實括號中只接受string類型,而咱們操做時常常把任意類型放進去,其實程序在這裏本身作了隱式轉換。那麼,何時能夠進行隱式轉換呢?
也就是說,小類型轉換爲大類型。如int能夠隱式轉換爲double,反過來卻不能,爲何呢?很好理解,小容器內的水總能所有倒入到大容器而不出錯,反過來,可能會把水溢出來。(我在以前也說過,把類型理解爲裝指定範圍值的容器)這樣也解釋了,任何變量類型總能轉換爲string字符串。由於string能夠存聽任意長度的任意東西。
隱式轉換順序以下:
char >> int >> double >> string;
bool >> string
你看完是否是想說我在玩兒你,char字符類型的怎麼能夠轉換爲整數int,例如a的整數是多少。我想請你打消顧慮,他的確能夠進行轉換,其實轉換的結果就是char對應的Ascii碼錶(點擊查看什麼是ascii碼)的值。例以下面的程序:
char a = 'a'; int b = a;//這裏有隱式轉換char>>int char c = (char)(a + 1); //這是什麼玩意兒?其實就是把a先隱式轉換爲int,而後加1,再強制轉換會char類型 Console.WriteLine(a); Console.WriteLine(b); Console.WriteLine(c); /* * 運行結果 * a * 97 * b */
你嘗試一下,輸出「abcde……xyz」(用循環)
參考
char a = 'a'; char b; for (int i = 0; i < 26; i++) { b = (char)(a+i); Console.WriteLine(b); }
在以前咱們使用這個輸出方法,老是輸出單一的變量或者一句簡單的字符串。那麼,怎麼進行多彩繽紛的輸出呢?例如用戶輸入了一個值,咱們再輸出一句話,「您輸入的是XXX」來讓用戶確認輸入的正確性。咱們來改造一開始那個用戶輸入兩個整數,輸出和的程序。我這樣寫:
Console.WriteLine("請輸入變量A:"); int a=Convert.ToInt32(Console.ReadLine()); Console.WriteLine("請輸入變量B:"); int b = Convert.ToInt32(Console.ReadLine()); int c = a + b; Console.WriteLine("您輸入的A變量是" + a + ",您輸入的A變量是" + b + ",他們的和是" + c);
先執行一下,效果是否是比剛纔好多了呢?須要解釋的是第二行的代碼,我把聲明和轉換寫成了一句,你是否理解了呢?還有最後一行的輸出,亂七八糟的是什麼啊?我重點介紹一下輸出:
還記得剛纔那句話麼,輸出方法的括號裏須要的類型是字符串,而我這裏面寫了一堆加號是幹啥的?難道int類型還能加字符串?
其實,當加號出如今字符串旁邊時,他已經失去了加法運算的性質,而變成了鏈接兩個字符串(如「hello,」+「北京你好」的結果就是「hello,北京你好」),而此時參與鏈接的abc這些整數變量,已經隱式轉換爲了string。因此上面程序輸出的結果就是你運行的那樣嘍。
上面那種方法是否是看着眼暈呢?其實還有更好地方法,佔位符!
我把上面的最後一句話改爲這樣的:
Console.WriteLine("您輸入的A變量是{0},您輸入的A變量是{1},他們的和是{2}",a,b,c);
上面的{0},{1}這樣的符號就是佔位符了,顧名思義,佔着位子的符號,也就是說,這些東西佔了位置,須要用東西填補起來,也就是逗號後面的對應的變量嘍。須要說明的佔位符的序號必須從0開始。你會了麼?本身試一下。將A和B的和差積商都輸出。
思考一個問題,咱們輸入時候,不知道你留心沒,智能提示有個相似的方法,Console.Write(),那麼和WriteLine什麼區別,哈哈,你猜到了麼?
寫以下的程序,來看一下區別:
Console.WriteLine("你好世界!"); Console.WriteLine("我愛你!!!"); Console.WriteLine("------華麗的分隔符-------"); Console.Write("你好世界!"); Console.Write("我愛你!!!"); /*運行結果 * 你好世界! * 我愛你!!! * ------華麗的分隔符------- * 你好世界!我愛你!!! */
發現點什麼嗎?原來他倆就差着輸出完是否換行,WriteLine輸出完後,會自動換行,而Write卻不會,你記住了嗎?
思考:咱們怎麼輸入換行呢?並且還有一個嚴重的問題,你是否能將字符串「高爾基說:「書是人類進步的階梯」。這句話告訴咱們要多讀書!」賦值給一個string變量呢?是否是發現問題了?雙引號沒辦法賦值給字符串,由於它自己表示字符串的開始或者結尾,咱們下面介紹處理這兩個問題的方法!
從字面講,就是轉換含義的字符,我介紹幾個經常使用的。見下表:
轉義字符 | 含義 | 示例 |
\n | 換行符 | Console.Write(「我愛你北京!!!\n」) |
\r | 回車符 | 注意,鍵盤的回車鍵至關於\t\n的組合,回車鍵是回車加換行 |
\t | 製表符 | 鍵盤的Tab鍵 |
\」 | 雙引號 | 表示是一個雙引號,此處雙引號再也不是字符串的開頭或者結尾(這裏是英文半角雙引號,中文的雙引號能夠直接輸入的) |
\\ | \(單斜線) | 表示一個斜線,因爲單斜線意味着轉義,因此想輸出單斜線,必須\\ |
舉個例子,好比文件的路徑C:\windows\system32\個人」電影」怎麼表示呢?(不要想多了啊,電影加了引號,仍是電影,嘿嘿)
string s="C:\\windows\\system32\\個人\"電影\"";
你看,我是否是用雙斜線代替了單斜線,用\」代替了雙引號。
若是我這個字符串中有\n,我不想讓他表示轉義的換行符,就是簡單的\n字符串,那麼咱們怎麼辦?咱們能夠在字符串前加原意字符@,以下
string s=@"C:\windows\system32\個人電影";
這樣輸出的單斜線仍是單斜線。你是否是好奇,我爲何取消\」了,由於在加原意字符@的字符串中,\」會出問題,你能夠本身嘗試一下(多試驗纔會知道)!
考慮一個有趣的問題,你能聲明一個名字是if的變量麼?貌似不能夠吧,我告訴你能夠這樣作,int @if;你試試,這樣會報錯麼?因此@能夠屏蔽關鍵字,這個你知道就好,不會用到的。
關於練習答案的聲明,之後能夠直接給我發郵件索求練習題答案,而且進行交流,索求答案時註明文章的序號,例現在天的是7。之後再也不佔篇幅解答練習答案。