我想從控制檯讀取一些數字。該號碼將出現在這樣 -如何從控制檯輸入數字
5 1 2 3 4 5
4 5 6 7 8
6 2 3 4 5 6 7
..............
EOF
的起始數字代表多少數字將出現在該行,即第一行的第一個數字是5,所以會出現在這條線5個號碼。輸入的結尾將由EOF(文件結束)表示。
我想讀整行作爲一個字符串,然後將它們轉換爲數字,但我想知道是否有任何其他方式來做到這一點。
我想從控制檯讀取一些數字。該號碼將出現在這樣 -如何從控制檯輸入數字
5 1 2 3 4 5
4 5 6 7 8
6 2 3 4 5 6 7
..............
EOF
的起始數字代表多少數字將出現在該行,即第一行的第一個數字是5,所以會出現在這條線5個號碼。輸入的結尾將由EOF(文件結束)表示。
我想讀整行作爲一個字符串,然後將它們轉換爲數字,但我想知道是否有任何其他方式來做到這一點。
看一看的scanf
文件:
int count, current, i;
while(scanf("%d", &count) > 0)
{
for(i = 0; i < count; i++)
{
scanf("%d", ¤t);
// store current
}
}
'標準' 答案是scanf()
。標準答案的麻煩在於,它不會允許您檢查一行中是否有正確數量的數字。所以,你的想法是讀一行,然後把它轉換成零碎,這對錯誤檢測來說更好。
看看How to use sscanf() in loops;那裏的答案向你展示了你應該做什麼的基本知識。這不是一個確切的副本。您將讀取識別行上有多少條目的第一個值,然後是用於將多個條目讀入陣列的代碼,並在數據與所聲明的格式不匹配的情況下進行適當的診斷。
如果您負責數據格式,則應考慮刪除計數字段 - 讓計算機計算線上有多少個值。計算機擅長計數,它消除了要檢測和處理的錯誤來源(因此它使編程更容易)。 (如果你確實改變了輸入格式,你的問題就變成了鏈接問題的重複。)
你錯過了在for循環中測試scanf的返回值。 – 2011-05-28 14:45:12
當你應該這樣做時,你也無法知道你是否達到了行尾。 'scanf()'會吃早發生的換行符,而忽略延遲發生的換行符。給定數據'1 1 3/1 2'(其中斜線是換行符),第一行將是'OK'(即使它包含2個值,而不是1),並且3將被解釋爲計數對於只有2個值的「第二」行。這就是爲什麼'scanf()'很少使用正確的函數。 (我已經使用了'scanf()',這比我在編程的前25年更加出色!) – 2011-05-28 14:52:29
@Neil Butterworth:我沒有添加它,因爲它沒有在問題中提到,但OP可以做如果需要,提供他讀取'scanf'文檔。 – 2011-05-28 14:53:03