#include?stdio.h?
void?main(void)
{
char?ch;
printf("请输入一个字符:");
scanf("%c",ch);
if(ch?'A'?ch?'Z'?||?ch?'a'?ch?'z'?)
printf("?");
}else
printf("非法字符!");
}
#includestdio.h
#includetime.h
#include stdlib.h
#include "regex.h"
const int MAX_LEN = 1000;
/*去掉字符串两端的空格*/
char * trimString(char guessString[])
int head = 0 ,rear = strlen(guessString)-1;
char result[MAX_LEN];
int i,k;
/*开头空格*/
while( guessString[head] != '\0'
(guessString[head] == ' ' || guessString[head] == ' ' )
)
head ++;
/*尾部空格*/
while( rear = 0
(guessString[rear] == ' ' || guessString[rear] == ' ' )
rear --;
for(i = head ,k = 0; i = rear ; i++ , k++)
result[k] = guessString[i];
result[k] = '\0';
return result;
/*
提取字符串中的【正整数】.
如果是恰好包含【一个正整数】的字符串(正数前后可以有任意个空格,正数可以有多余的前导0),则返回这个正数;
如果是一个空串,则返回 -1
*/
int transStringToNum(char guessString[])
int i;
char trimGuessString[MAX_LEN];
int num = 0;
// 去前后空格
strcpy(trimGuessString,trimString(guessString));
// 检查是否空串
if( 0== strlen(trimGuessString) )
return -1;
// 检查是否有非数字字符
for(i = 0 ; trimGuessString[i] != '\0' ; i ++)
// 字符串转换成数字
for(i = 0 ,num = 0 ; trimGuessString[i] != '\0' ; i++)
num = num * 10 + (trimGuessString[i] - '0');
return num;
int main()
int num,guessNum,n,count=0;
char guessString[MAX_LEN];
char reply;
srand(time(NULL));
do
//产生一个随即数
num=rand()0+1;
printf("你有10次机会,请猜数字并按回车.\n");
for(n=1;n=10;n++)
// 以字符串形式读入一个整数
gets(guessString);
调用函数 transStringToNum 进行有效性验证
当返回值 guessNum 是负数时,
字符串 guessString 中没有合法的正数
guessNum = transStringToNum(guessString);
if(guessNum == -1 )
printf("请输入一个数字(必须是在1-100 之间)!\n");
n--;
continue;
printf("输入的不是一个合法数字(必须是在1-100 之间)!\n");
if(guessNumnum)
printf("It's too high!\n");
else if(guessNumnum)
printf("It's too low!\n");
这里有误,是 == 而不是 =
因为你刚好把这个分支放在最后,所以呢察觉不到错误
如果你写成
if(guessNum = num) else if(guessNumnum) else if(guessNumnum)
就知道错了.这时if(guessNum = num)永远都会被执行
因为这是一个【赋值语句】而不是【逻辑语句】,且 num 的值是恒正的
else if(guessNum == num)
printf("You are right!\n");
printf("你共用了%d次机会猜对数字.\n",n);
break;
printf("Do you want to continue(Y/N or y/n)?");
用 getch() 取代scanf ,不易出错
因为 getch()只能输入一个字符
而 scanf 可以读入多个字符,而且要回车
fflush(stdin);
reply = getch();
}while((toupper(reply)=='Y'));
printf("The game is over!\n");
return 0;
输入合法数字示例(数字包含在一对""中):
首先看定义,用单引号括起来的单个字符,或用双引号括起来的一串字符即字符常量.
C '' 是用单引号括起来的单个字符,正确.
以上就是土嘎嘎小编为大家整理的c语言里非法字符的函数相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!