我有這個輸入:Ç - 當時讀單個int
輸入:2015年
我想SCANF他這個樣子:
scanf("%1d", &arr);
但這肯定是錯的。我能做什麼? 我想通過像'2','0','1','5'等整數接收輸入整數,而不是像「2015」。
我有這個輸入:Ç - 當時讀單個int
輸入:2015年
我想SCANF他這個樣子:
scanf("%1d", &arr);
但這肯定是錯的。我能做什麼? 我想通過像'2','0','1','5'等整數接收輸入整數,而不是像「2015」。
只是單獨閱讀每個字符,並將個人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);
}
}
非常有幫助,謝謝! – MoonWalker
如果輸入就像2015
固定的大小,那麼你可以使用
int arr[4];
for(int i=0; i<4; i++){
scanf("%1d", arr+i);
}
但一般情況下,你可以使用fgets作爲字符串讀取。
我建議閱讀整行,然後專門解析它。
要讀取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)我不喜歡,因爲它是有狀態的)等等
閱讀他們字符一一(如果必要,每個轉換爲整數) ? –
使用'%c'來讀取字符。整數值然後是'c''0'' – Barmar
您的意思是**數字**。這就像在學校。請使用正確的條款,否則不清楚你的意思。 – Olaf