[英]Why can't I assign a scanf statement directly to a variable in C?
int a = scanf("%d", &a);
與int a; scanf("%d", &a);
不同int a; scanf("%d", &a);
int a; scanf("%d", &a);
?
我需要一些幫助,以了解這兩件事在幕后的工作方式,因為它們顯然會輸出不同的結果。
scanf
是C語言中的標准輸入函數。
關於scanf
您應該了解的第一件事是“返回值”。 如果您在Linux上,請通過訪問man scanf
來參考scanf
的手冊頁。
scanf
返回從標准輸入讀取的值的數量。 也就是說,在這種情況下,您的scanf
將返回1,因為僅讀取了一個值。
所以如果你跑
int a = scanf("%d", &a);
首先,表達式int a
將創建一個新的int變量,其大小為int(4個字節)。 然后scanf("%d", &a)
將通過標准輸入輸入size int的值。 假設您輸入5。
但是,當您將scanf
返回的值設置為a
,即從標准輸入中讀取的值為1。因此,無論您輸入什么值, a
始終為1。
現在,至於
int a;
scanf("%d", &a);
你在做什么,首先創建a
與int a
。 然后,您“不”將scanf
的返回值保存在任何地方。 這意味着從scanf
,您輸入的任何值都會讀入a
。 就是這樣。 返回值(對於scanf
,返回值是輸入值的數量;在這種情況下,我們僅輸入一個值,因此它是1)沒有被饋送到a或任何其他變量。 因此, a
現在具有您先前從標准輸入中輸入的值。
int a; scanf("%d", &a);
在上面的代碼中,聲明了一個整數變量,並將其地址傳遞給scanf函數,因為在scamf函數內部對get的值進行了修改。因此,為了反映主函數中的更改,您必須傳遞地址。 scanf函數從標准輸入流stdin中讀取輸入,並且a的值將更改為該值。
int a = scanf("%d", &a);
在這段代碼中,scanf的工作也類似。但是在scanf函數之后,它的返回值分配給了a。 scanf函數返回成功匹配和分配的輸入項的數量,該數量可以少於提供的數量,如果早期匹配失敗,則為零。因此,此處a的值為1或零。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.