2012-08-03 17 views
3

我寫了一段可以從鍵盤輸入地址的代碼。然而,我無法弄清楚如何我也許能在特殊字符,如連字符,冒號等看能否請您提出一些編輯下面我的代碼:如何使用scanf函數讀取特殊字符(標點符號,超音符,冒號)?

#include<stdio.h> 

main() 
{ 
     char address[80]; 


     printf("Enter address: "); 
     scanf("%[a-z | A-Z | 0-9]", address); //How may I include characters like hypen. 
     printf("\n\n%s\n\n", address); 
} 

輸出我得到:

Enter Address: Plot No - 16, Palm Grooves, Nagpur - 440022, India 

Plot No 

沒有逗號,沒有連字符,也沒有顯示數字。

謝謝你的幫助和評論。

+0

如果您[知道](HTTP ://en.wikipedia.org/wiki/Scanf_format_string)你現有的代碼做了什麼,特別是'scanf(「%[az | AZ | 0-9',答案顯而易見。 – bzlm 2012-08-03 11:36:20

+0

是的,我意識到我在做: scanf(「%[az | AZ | 0-9]」); 將允許鍵入所有的小字符AZ,大寫字母AZ和數字0-9。我只是無知加載g特殊字符.... – Niteesh 2012-08-03 11:41:05

+0

這很好。但[對格式字符串沒有什麼特殊的字符](http://stackoverflow.com/a/11794936/7724)。 – bzlm 2012-08-03 11:54:12

回答

8

它們添加到可接受的字符列表一個接一個,像這樣:

"%[a-z | A-Z | 0-9/,.-]" 

這裏是this example on ideone

由於您使用scanf成有限大小的緩衝區,這是一個好主意,一個大小限制,以避免緩衝區溢出添加到格式說明:

char address[81]; // One extra character for padding 
printf("Enter address: "); 
scanf("%80[a-z | A-Z | 0-9/,.-]", address); // %80 limits the input 
printf("\n\n%s\n\n", address); 
+0

謝謝你這樣詳細的答案。 – Niteesh 2012-08-19 14:23:01

+0

這個答案需要注意。不是'「/ - ,」'像''a-z「'這樣的範圍? 「特殊字符」包括'''''''''','''''''''',''''''在掃描集中具有它們的特性。使用''''會導致實現定義的行爲。我會寫我自己的答案,但我認爲這個MOD的一些將是更好的方式去。你的想法? – chux 2016-02-13 15:54:24

+0

@chux謝謝!當你看到這樣的錯誤,隨時編輯他們沒有問,因爲它是絕對是錯誤,謝謝! – dasblinkenlight 2016-02-13 15:58:39

相關問題