通常情況下,你會使用類似"%4c"
或"%4s"
至最多4個字符閱讀(不同的是,"%4c"
讀取下一個4個字符,而不管,而"%4s"
跳過前導空白,如果有空白則停在空白處)。
但是,爲了在運行時指定長度,必須要稍微複雜一點,因爲不能使用嵌入了「4」的字符串文字。一種選擇是使用sprintf
創建你會傳遞給scanf
字符串:與printf
您可以動態地通過將星號(*
)在指定字段寬度或精度:
char buffer[128];
sprintf(buffer, "%%%dc", max_length);
scanf(buffer, your_string);
我也許應該補充格式字符串,並傳遞變量在適當的位置,以指定的寬度/精度:
int width = 10;
int precision = 7;
double value = 12.345678910;
printf("%*.*f", width, precision, value);
鑑於printf
和scanf
格式字符串十分相似,人們可能會認爲同樣會與工作。不幸的是,情況並非如此 - scanf
轉換規範中的星號表示應該掃描但未轉換的值。也就是說,輸入中必須存在的東西,但其值不會放在任何變量中。
它仍然是在結束在y閱讀。我不知道這個價值可能會持續多久。 – Kira 2010-12-09 23:59:13