2012-07-18 66 views
3

我試圖在Turbo C中運行此程序,但無法破譯輸出。這個%*c是什麼意思?任何幫助,將不勝感激。%* c in scanf() - 這是什麼意思?

int dd,mm,yy; 
printf("\n\tEnter day,month and year"); 
scanf("%d %*c %d %*c %d",&dd,&mm,&yy); // what does %*c mean ? 
printf("\n\tThe date is : %d %d %d",dd,mm,yy); 

輸出

Enter day, month and year 23 
2 
1991 
3 
5 
The date is: 23 1991 5 
+3

捨棄下一個字符。 – nhahtdh 2012-07-18 13:01:43

+0

如果他想放棄接下來的3個字符,該怎麼辦? – 2012-07-18 13:02:34

+2

@tuğrulbüyükışık:你可以使用'%* 3c'來指定要跳過的字符數。 – 2012-07-18 13:19:01

回答

8

*scanf()格式意味着「讀取數據,但在參數列表中不把它分配給一個變量」。在上下文中,這意味着你可以輸入:

18/07/2012 

,並獲得一天(18),月(7)和今年(2012年)正確解釋。格式字符串中的空格是至關重要且複雜的。通常,%c會讀取下一個字符,即使是空格,但%*c轉換說明符的空格將處理空白,因此代碼需要使用非空字符。

因此,觀察到的行爲,當鍵入:

23 2 1991 3 5 

2(自有)通過所述第一%*c和3(自身)所消耗由第二消耗。

這是標準C,不是Turbo C的特有功能(問題的第一版指定,但自從我第一次寫這個答案以來,該問題已被編輯以刪除對Turbo C的引用)。

+0

我想我不知道這個。謝謝無論如何! – Peps0791 2012-07-18 13:11:30

4

%之後的*以格式字符串表示與該格式匹配的輸入將被忽略(因此不需要傳遞指向變量的指針來存儲您不打算使用的匹配值)。

3

這意味着忽略下一個字符,例如空格,/-,這在寫作日期中很常見。

1

使用*scanf禁止分配。隨後的轉換結果被丟棄。