簡體   English   中英

為什么不能將scanf語句直接分配給C中的變量?

[英]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); 

你在做什么,首先創建aint 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM