【问题标题】:How to read special characters (punctuation marks, hypens, colons) using scanf function?如何使用 scanf 函数读取特殊字符(标点符号、连字符、冒号)?
【发布时间】:2012-08-03 11:32:31
【问题描述】:

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

#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

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

感谢您的帮助和cmets。

【问题讨论】:

  • 如果您knew 您的现有 代码做了什么,特别是scanf("%[a-z | A-Z | 0-9,答案将是显而易见的。
  • 是的,我确实意识到我在做什么:scanf("%[a-z| A-Z | 0-9]");将允许键入所有小字符 a-z、大写字母 A-z 和数字 0-9。我只是不知道添加特殊字符....

标签: c character special-characters scanf


【解决方案1】:

将它们一一添加到可接受的字符列表中,如下所示:

"%[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);

【讨论】:

  • 感谢您如此详尽的回答。
  • 这个答案需要注意。 "/-," 不是 "a-z" 这样的范围吗? “特殊字符”包括']''^''-''\"',它们在扫描集中有其特点。使用'-' 会导致实现定义的行为。我会写自己的答案,但我认为对此进行一些修改会是更好的方法。你的想法?
  • @chux 谢谢!当您看到这样的错误时,请随意编辑它们而无需询问,因为这绝对是一个错误。谢谢!
猜你喜欢
  • 2012-12-18
  • 2011-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-26
  • 2012-09-05
  • 2016-02-20
  • 2017-08-22
相关资源
最近更新 更多