我想使一個C程序,需要空間分隔整數的一個字符串作爲輸入(正和負,可變數目數字)並將字符串轉換爲一個int數組。
還有一個關於從堆棧溢出字符串輸入數組讀取int的問題,但它不適用於數字長度超過1或負數的數字。
嘗試:
#include <stdio.h>
int main() {
int arr[1000], length = 0, c;
while ((c = getchar()) != '\n') {
if (c != ' ') {
arr[length++] = c - '0';
}
}
printf("[");
for (int i = 0; i < length-1; i++) {
printf("%d,", arr[i]);
}
printf("%d]\n", arr[length-1]);
}
如果我輸入以下到終端:
$ echo "21 7" | ./run
$ [2,1,7]
這是陣列I得到:[2,1,7]而非[21,7 ]
如果我輸入以下內容:
$ echo "-21 7" | ./run
$ [-3,2,1,7]
我得到:[-3,2,1,7]而不是[-21,7],這是沒有意義的。
但是,如果我輸入:
$ echo "1 2 3 4 5 6 7" | ./run
$ [1,2,3,4,5,6,7]
注:我假設輸入它總是空格隔開的整數的字符串。
爲什麼'length'在使用前未初始化爲某個值? – babon
我修正了這個問題。我注意到我正在使用'getchar',它每次掃描一個字符。 'scanf'在這裏有幫助嗎?但是這並不能解釋爲什麼我爲'-21'獲得'[-3,2,1]'。 – user6005857
由於'-'的ASCII碼比'0'的ASCII碼小3,所以你得到'-3'。 getchar()只有一個字符,不管字符是什麼類型,所以你將減號視爲一個數字。 – Arc676