【问题标题】:Validation using isalpha for a loop使用 isalpha 进行循环验证
【发布时间】:2016-07-08 11:25:37
【问题描述】:

我正在用 C 语言编写一个程序,其中涉及 4 个选项的选择。 但是,我无法验证变量 Option 的值是否是 1、2、3 或 4 以外的字母或数字。当我输入字母时,它会继续循环打印语句而不是输入函数,我我无法继续我的程序。 有人可以告诉我我的代码有什么问题吗?

int Option;

while( (Option>4) || ( isalpha(Option) ) )


{

printf("Please select a valid option from the 4 options listed above! \n");

scanf(" %d",&Option);

}

【问题讨论】:

  • Option 是否包含字符或整数值?在前一种情况下,您可能应该与'4' 进行比较,而不是4。在后一种情况下,isalpha 不会按照您的预期进行。
  • 需要检查scanf调用的返回值:if (scanf("%d", &Option) != 1) { fprintf(stderr, "error in scanf on line %d.\n", __LINE__); exit(EXIT_FAILURE); }
  • 您不能使用scanf 同时输入数字(1、2、3、4、5、6,...)和字母('a','b',... 'A','B',...)。我建议您改为使用 fgets() 读取用户输入,然后解析输入。
  • 感谢您的解释。我想我会听取你的建议并仔细阅读。 =)

标签: c while-loop alphabetical


【解决方案1】:

description for the function isalpha() 声明

在“C”语言环境中,isalpha 仅对 isupper 或 islower 为真的字符返回真。

这意味着

isalpha('4') // false
isalpha(4) // false in ASCII-based computers
           // the ASCII table assigns 4 to a control character
isalpha('A') // true
isalpha(65) // true in ASCII-based computers
            // the ASCII table assigns 65 to the symbol 'A'

【讨论】:

  • 别忘了提到为什么isalpha(65) 返回true ;)
  • 您好,您能简单解释一下吗?我有点明白它基本上只适用于可以大写或小写的字符。但是,我不确定如何使用这种方法或任何其他方法来验证这一点。
猜你喜欢
  • 2018-04-08
  • 2015-07-07
  • 1970-01-01
  • 2011-06-13
  • 2016-06-07
  • 2014-03-01
  • 2014-10-03
  • 2014-10-11
  • 2012-12-07
相关资源
最近更新 更多