2016-12-02 61 views
0

我是C編程的新手,我現在正在學習scanf如何用scanf()解釋我的代碼?

我寫了一些代碼,並試圖理解它。

下面是代碼:

#include <studio.h> 
int main(){ 
    int a=1, b=2, c=3; 
    scanf ("%d%d", &a,&b); 
    scanf ("%d", &c); 
    scanf ("%d", &c); 
    printf ("a=%d\nb=%d\nc=%d\n", a, b, c); 
    return 0; 
} 

When I input 
11 22 33 44 
The output is 
a=11 
b=22 
c=44 

這是正常的。但是,當我輸入:

11, 22, 33, 44 
Output 
a=11 
b=2 
c=3 

它看起來像逗號停止輸入過程。

誰能向我解釋爲什麼會發生這種情況?

實際上,將%d%d之間的逗號時(這就像「%d, %d"),並提供輸入數據,輸入已用逗號隔開。

誰能給我逗號幾點建議scanf參數?

+1

'scanf'嘗試解釋您指定的輸入。對於第一個'%d'來說很好,它顯然是11.然後它讀取一個','並試圖將它轉換爲一個整數,這不起作用。所以它失敗了,並且它的值和以前一樣('b = 2')。 下一個'scanf'嘗試相同的並再次失敗,因此具有'c = 3'。所以只是不要用''分隔你的值,你會沒事的。 – SgtDroelf

+1

與其試圖猜測'scanf()'的行爲如何,而不考慮您使用的任何文本中的文檔或其解釋?或者也許問你的導師?在尋求幫助之前,我們希望您能夠做出合理的努力爲自己找到解決方案。 –

+0

感謝您的回覆。當我自己學習C時,沒有教練可以幫助我。 – user7241487

回答

1

當在標準輸入中找到與格式字符串不匹配的字符時,scanf停止讀取。

在你的例子中,你的scanf只期望形成一個整數值的字符。事實上,第一個scanf在到達第一個逗號時停止。當其他scanfs嘗試讀取標準輸入時,他們將找到的第一個字符將成爲previuos scanf讀取但未使用的最後一個字符,即逗號。這就是爲什麼他們很快就會結束而沒有閱讀任何東西。

如果要在輸入中使用逗號或其他字符以覆蓋要記住的值,則必須在格式字符串中插入它們的顯式。

例如本statment:

scanf("%d, %d", &a, &b); 

您指示scanf函數讀取一個整數,並將其保存在變量a,讀一個逗號和忘記它,然後讀取另一個整數,並將其保存在變量b。如果在解析過程中scanf會發現它不是一個整數或逗號,它們將立即停止而不讀取其他值(這就是b和c在程序中具有較早值的原因)。

0

您可以使用逗號scanf這樣的:。 scanf ("%d,%d,%d", &a,&b,&c); 那麼你輸入號碼之間用逗號分隔的單行 11,12,13 注意,在這種情況下scanf預計單數行輸入的數字用逗號分隔。如果您在這種情況下的輸入將是11 12 13那麼您現在將得到所需的輸出。

0

感謝您的回覆。我嘗試另一個代碼:

#include <stdio.h> 
int main(){ 
    int a=1, b=2, c=3; 
    scanf ("%d, %d", &a,&b); 
    scanf ("%d", &c); 
    scanf ("%d", &c); 
    printf ("a=%d\nb=%d\nc=%d\n", a, b, c); 
    return 0; 
} 

當我輸入

11 22 33 44 

輸出:

a=11 
b=2 
c=33 

怎麼解釋?

+0

這個答案不回答帖子的問題,但是是另一個問題。建議刪除。 – chux

0

要第二個問題(不知道怎麼在這裏引用:()

首先scanf預計用逗號分隔的整數。當你沒有進入像那scanf一舉數11,並賦予它a您輸入(b被忽略)。其次scanf了在輸入數字22和第三scanf33。數44是多餘的。這就是爲什麼你的輸出看起來像。 注意b=2是從以前的代碼部分int b=2