2008-09-27 61 views
1

C如何處理整數和字符之間的轉換?假設你已經聲明瞭一個整型變量,並要求用戶輸入一個數字,但是他們輸入了一個字符串。會發生什麼?C整數和字符之間的兼容性

回答

6

用戶輸入被視爲需要使用atoi或其他轉換函數轉換爲int的字符串。如果字符串不能作爲數字插入,Atoi將返回0,因爲它包含字母或其他非數字字符。

你可以閱讀更多的在文檔的atoi MSDN上 - http://msdn.microsoft.com/en-us/library/yd5xkb5c(VS.80).aspx

0

該程序會崩潰,您需要調用atoi函數。

3

嗯? 你總是輸入一個字符串。然後你解析將這個字符串轉換爲數字,用各種方式(再次詢問,採取默認值等)處理各種錯誤(溢出,不正確的字符等)。

3

另外一點需要注意的是,在C,字符和整數是「兼容」到一定程度。任何字符都可以分配給一個int。反之亦然,但如果整數值不適合字符,則會丟失信息。

char foo = 'a'; // The ascii value representation for lower-case 'a' is 97 
int bar = foo; // bar now contains the value 97 
bar = 255; // 255 is 0x000000ff in hexadecimal 
foo = bar; // foo now contains -1 (0xff) 
unsigned char foo2 = foo; // foo now contains 255 (0xff) 
3

正如其他人所指出的那樣,數據通常是以字符串的形式輸入的 - 唯一的問題是使用哪個函數進行讀取。如果您使用的是GUI,該功能可能已經以適當的方式處理轉換爲整數和報告錯誤。如果你使用的是標準C,通常讀取字符串的值比較容易(可能與fgets()然後轉換)雖然可以使用atoi(),但它很少是最好的選擇;麻煩在於確定轉換是否成功(和產生零,因爲用戶輸入的合法代表的零)或不

通常,使用strtol()或其親屬(strtoul()strtoll()strtoull())中的一個;用於將浮點數,使用strtod()或類似的功能。整數轉換例程的優點包括:

  • 使用標準C約定(007表示八進制,0x07表示十六進制,7表示十進制),可選的基本選擇(例如,基數10或基數10 - 十六進制或基數8 - 八進制或上述任何一種。
  • 可選錯誤檢測(通過知道轉換停止的位置)。

這些功能規範(當我不看我實際的C標準副本)時,我去的網站是POSIX網站(其中包含C99功能)。它以Unix爲中心而不是以Windows爲中心。

相關問題