【C#學習筆記】【7】我想從鍵盤輸入變量的值,這樣程序就更靈活了(輸入輸出函數以及類型轉換)

咱們在以前的文章中,對於變量的賦值(初始化)都是直接寫在程序中的,那若是想從鍵盤輸入,怎麼作呢?我來介紹一個用於從鍵盤獲取輸入值的方法。windows

Console.ReadLine()方法

看到這個標題,是否是想起了什麼?對,咱們以前用的輸出函數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轉換,一種是強制轉換(不是任何地方均可以強制轉換)。固然我會告你剛纔的錯誤中所說的隱式轉換是什麼東西。字符串

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

多彩繽紛的輸出方法Console.WriteLine()

在以前咱們使用這個輸出方法,老是輸出單一的變量或者一句簡單的字符串。那麼,怎麼進行多彩繽紛的輸出呢?例如用戶輸入了一個值,咱們再輸出一句話,「您輸入的是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;你試試,這樣會報錯麼?因此@能夠屏蔽關鍵字,這個你知道就好,不會用到的。

總結

  1. 怎麼樣從控制檯輸入一個值
  2. 類型怎麼轉換
  3. 什麼是顯式轉換和隱式轉換
  4. 輸出方法的多樣性
  5. 字符串旁邊的+是什麼意思
  6. 轉義字符是什麼
  7. 怎麼不讓轉義字符轉義

練習

  1. 用戶輸入一個數,判斷其是奇數仍是偶數,而且輸出,而後再讓用戶輸入一個數,判斷是否能被剛纔的數整除,餘數是多少。儘可能使用今天的內容解答問題,而且加入適當的提示性信息,例如「請輸入一個數」之類的提示語,儘可能使程序友善。

關於練習答案的聲明,之後能夠直接給我發郵件索求練習題答案,而且進行交流,索求答案時註明文章的序號,例現在天的是7。之後再也不佔篇幅解答練習答案。

相關文章
相關標籤/搜索