2015-10-09 44 views
1

我有這個輸入:Ç - 當時讀單個int

輸入:2015年

我想SCANF他這個樣子:

scanf("%1d", &arr); 

但這肯定是錯的。我能做什麼? 我想通過像'2','0','1','5'等整數接收輸入整數,而不是像「2015」。

+0

閱讀他們字符一一(如果必要,每個轉換爲整數) ? –

+1

使用'%c'來讀取字符。整數值然後是'c''0'' – Barmar

+1

您的意思是**數字**。這就像在學校。請使用正確的條款,否則不清楚你的意思。 – Olaf

回答

2

只是單獨閱讀每個字符,並將個人char s轉換爲整數。

#include <stdio.h> 

int main(int argc, char* argv[]) 
{ 
    size_t len, i; 
    char buff[64]; 

    fgets(buff, sizeof(buff), stdin); 

    for(i = 0, len = strlen(buff); i < len; ++i) { 
     int curr = buff[i] - '0'; /* subtracting '0' converts the char to an int */ 
     printf("%d\n", curr); 
    } 
} 
+0

非常有幫助,謝謝! – MoonWalker

2

如果輸入就像2015固定的大小,那麼你可以使用

int arr[4]; 
for(int i=0; i<4; i++){ 
    scanf("%1d", arr+i); 
} 

但一般情況下,你可以使用fgets作爲字符串讀取。

1

我建議閱讀整行,然後專門解析它。

要讀取POSIX系統的線路使用getline(3),這將在堆中分配的行緩衝器(不要忘記初始化包含行到NULL和可變大小設置爲0的指針,和free你所在的線完成)。如果您不幸在沒有getline的系統上,請聲明一個較大(例如至少256個字節)的緩衝區並使用fgets(3)。順便說一下,在Linux上,爲可編輯的輸入從終端-a.k.a.一個tty - (不是管道或文件,所以測試isatty(3)),你甚至可以考慮使用readline(3);嘗試一次,它非常方便!一旦整行記錄在內存中,您可以解析它(只要您定義了該行的語法,至少在您的腦海中;一個例子通常是不夠的;您可能要在文檔中使用EBNF)。

您可以使用sscanf(3)解析該行或使用某些迭代代碼等手動解析它。不要忘記檢查掃描項目的返回計數。也許%n可以很方便(獲得一個字節數)。你也可以手動解析該行,或使用strtol(3)解析long號,(或者strtok(3)我不喜歡,因爲它是有狀態的)等等