【问题标题】:Validation of data with char用 char 验证数据
【发布时间】:2015-06-03 15:42:49
【问题描述】:

我正在寻找一个有效条件来检查用户是否正在写一个字符。我正在尝试使用 (n!=char),但这显然在 C 中是不可能的,对吧?

这就是我所拥有的:

char n;
do
{
    printf("Introduce a caracter\n");
    scanf("%c", &n);
    if(n!=char)
        printf("Error! The caracter you introduced is not valid.\n");
}
while(n!=char);

return n;

【问题讨论】:

  • 您希望什么样的字符有效?
  • 这个代码确实行不通,因为你不能简单地猜测C语言的语法,你实际上必须知道它。
  • 每个字符都是有效的,我不希望用户输入任何整数
  • 数字也是字符。你的意思是你想让用户输入一个字母?标点符号可以吗?控制角色?您需要能够接受空格、制表符和/或换行符吗?
  • 我希望程序只接受字母 A-Z,大写或小写

标签: c if-statement char int do-while


【解决方案1】:

由于你只需要字母,大写或小写,你可以在 if 语句中使用这个条件来检查它。

if((n<'a' || 'z'<n) && (n<'A' || 'Z'<n))
    printf("Error! The caracter you introduced is not valid.\n");

这意味着:

如果“n”不在“a-z”之间且不在“A-Z”之间,则错误

考虑到ascii chart,您可以将字符视为存储的整数。

【讨论】:

  • 我不知道我可以在字符方面做到这一点,我希望它有效,谢谢!
  • @eventHandler : 'or' 语句不应该表达为||吗?
  • @Gophyr 你是对的,我已经编辑了它。感谢您指出这一点。
【解决方案2】:

您无法在此方法中区分字符和非字符,因为您正在读取字符。字符只是一个 8 位整数,它可以是有符号或无符号的,就像 8 位整数可以是(int8_tuint8_t)一样。因此,您可以这样说:

char c = 'A';
printf("%d %c\n", c, c);

这将打印:

65 岁

因为 A 由十进制数 65 表示,而 %d` 指定您希望打印一个十进制整数。

如果您想区分字符“A”和字符“4”,则可以使用此处使用的 eventHandler 之类的东西。如果您希望将 'A' 之后的所有内容都算作一个字符(这包括一些字符,例如 '[' 和 '_'),您可以使用类似:

if (n < 'A') {
  printf("ERROR: You did not enter a character.\n");
}

正如 eventHandler 也所说,阅读一个 ascii 图表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-04
    • 1970-01-01
    • 1970-01-01
    • 2017-02-04
    • 1970-01-01
    相关资源
    最近更新 更多