如何使用scanf函数读取特殊字符(标点符号,连字符,冒号)?

时间:2012-08-03 11:32:31

标签: c character special-characters scanf

我写了一段代码,可以从键盘输入地址。但是,我无法弄清楚如何能够读取特殊字符,例如hypen,冒号等。您能否建议对我的代码进行一些编辑:

#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

没有逗号,没有连字符,没有显示数字。

感谢您的帮助和评论。

1 个答案:

答案 0 :(得分: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);