对于我正在编写的程序,我需要使用scanf()
仅扫描0-9,A-Z和a-z之间的字符。
我想我可以使用一些不错的比较运算符来帮助我实现目标。例如,也许这可行:
int i = 3;
char a[7] = {'a', 'b', 'c', '?', 'e', 'f', '\0'};
if (!(a[i] >= '0' && a[i] <= '9') && !(a[i] >= 'A' && a[i] <= 'Z') && !(a[i] >= 'a' && a[i] <= 'z'))
printf("not 0-9. A-Z, or a-z!\n");
换句话说,如果a[i]
中的字符不是数字或字母,则打印该语句。但是,这没有用。任何替代方案?
答案 0 :(得分:2)
if (!isalpha(a[i]) && !isdigit(a[i])) {
printf("Not a letter or a digit\n");
}
您需要包含<ctype.h>
才能引用这些功能。
答案 1 :(得分:1)
根据评论编辑:
要让scanf()只输入某些字符,你可以尝试:
char buffer[100] = {'\0'};
if( 1 != scanf( "%99[0-9A-Za-z]", buffer ) )
{ // scanf failed -- EOF or I/O error
perror( "scanf failed" );
exit( EXIT_FAILURE );
}
这个问题没有讨论在遇到“非期望的”之后是否要继续输入。性格也不怎么处理“不希望的”因此我不会假设第二次猜测问题情景。
最多可以输入99个字符但如果遇到0 ... 9,A ... Z以外的任何字符则会停止。 A ... Z
答案 2 :(得分:1)
要使用scanf()
仅接受某些字符,请使用"%[]"
char dest[80];
if (scanf("%79[0-9A-Za-z]", dest) == 1) {
printf("Success.%s.\n", dest);
} else {
puts("Fail");
fgetc(stdin); // Consume non-matching character.
}