❶ 怎样检查c语言输入数据的合法性
1.
通过scanf函数的返回值来验证输入的合法性。
2.
scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:(不是结束该scanf函数,scanf函数仅在每一个数据域均有数据,并按回车后结束)。
①
遇空格、“回车”、“跳格”键。
②
遇宽度结束。
③
遇非法输入。
3.
scanf()函数返回成功赋值的数据项数,读到文件末尾出错时则返回EOF。
如:
scanf("%d
%d",&a,&b);
如果a和b都被成功读入,那么scanf的返回值就是2
如果只有a被成功读入,返回值为1
如果a和b都未被成功读入,返回值为0
如果遇到错误或遇到end
of
file,返回值为EOF。
且返回值为int型.
❷ 判断是否为C语言的合法标识符
这不是小问题啊……你这个问题很大啊……
#include<stdio.h>
#include<string.h>
intmain()
{
charstr[1000][80];
inti,j,k,n,flag=1,len;
scanf("%d",&n);
for(j=0;j<n;j++)
{
/*不要k循环。80代表字符串的最长长度,但是字符串也可能不到80个字符,所以不应该一个个字符的读入,而且%s代表读入一整个字符串而不是一个字符。所以应该读入到str[j]里。前面不用&号因为str[j]已经是地址了。*/
scanf("%s",str[j]);
}
/*我帮你调了缩进,你看一下是不是清晰了很多……最内层的else如果print0之后break,后面还会print1。这是最大的问题*/
/*我们用一个flag变量代表当前字符串是否合法。1代表合法,0不合法,最后统一输出即可。*/
for(j=0;j<n;j++)
{
k=0;
flag=1;
if(str[j][k]==95||str[j][k]>64&&str[j][k]<91||str[j][k]>96&&str[j][k]<123)
{
/*我们不知道字符串有多长。所以k<80不行。*/
len=strlen(str[j]);
for(k=1;k<len;k++)
{
if(str[j][k]==95||str[j][k]>64&&str[j][k]<91||str[j][k]>96&&str[j][k]<123||str[j][k]>47&&str[j][k]<58)
continue;
else
{
flag=0;
break;
}
}
}
else
flag=0;
printf("%d ",flag);
}
return0;
}
最后再补充几点,
不用统一输入统一输出。输入一个字符串,处理,输出,再输入下一个即可。
|| && 一起用的时候加括号,避免潜在的逻辑错误
用'A'来取A字符的ascii码。你就不用去查表了。而且就算你要直接用ascii值,str[j][k]>=48也比str[j][k]>47可读性大很多。
所以你这里完全可以写成
str[j][k]>='A'&&str[j][k]<='Z'
❸ c语言中怎么判断一个转义字符是合法的
转义字符就那么多
分为两类
一个是固定字母的 比如 \t \n
这个就只能背了 没什么办法
另一类就是通用的,包括8进制 16进制
8进制的 \ooo 后面的ooo是1到3个合法的8进制字符。
16进制 \xhh 后面的hh是1到2个合法的16进制字符。
符合以上的 就是合法的。 否则非法。
❹ c语言中,怎么判断常量是否合法
整型分前缀(0、0x)和后缀(u、l),每种进制中用的数字不同;
浮点数后缀f、l,指数表示注意是否在范围内;
字符与字符串主要注意转义字符后面是否合法;
a:整数中不允许出现逗号;
b:科学计数法表示1.5乘以10的2.0次方,由于科学计数法指数部分只能是整数。
c:\号是转义符号后面要跟其他符号来表示具体字符,这里什么都没跟就写反引号了;
d:字符串常量是连续的2个字符,第1个字符的ascii码是7,第2个字符的ascii码是0作为字符串结束符号,第1个字符是响铃符号,输出时会让默认扬声器发出声音。
(4)c语言怎么看是不是合法扩展阅读:
字符串常量是用双引号括起来的字符序列。
字符常量可以赋值给字符变量,例如"charB='a';"您不能将字符串常量分配给字符变量,也不能将字符串常量分配给这两个变量!
例如,下面是一个有效的字符串常量:
"Howdoyoudo.","CHINA","a","$123.45","C语言编程","an","#123",""等等是字符串常量
存储:字符串中的字符依次存储在连续的内存区域中,并且null字符'\0'会自动附加到字符串的末尾作为字符串的结尾。因此,一个n个字符的字符串应该在内存中占(n+1)个字节。
❺ c语言 输入一个字符串,判断其是否是C的合法标识符。
1、使用中文当标识符,其前提是编译器支持中文当标识符,C++11之后,通用字符名覆盖到了汉字。
2、使用中文作为标识符时,其头文件与原来一样。
3、程序中的名字空间,保持不变。
4、可以将保留字定义为中文,用define定义。
5、可以用类型名,直接定义中文的变量名。
6、中文标识符的使用,和普通标识符一样。
❻ c语言怎么判断常量合不合法
法律分析:只能是A-Z,a-z,0-9与下划线组成(也就是说空格或其他字符都不能有)。不能以数字开头
法律依据:《C语言程序设计》 第二章 常量 2e32.6 -e-5 "/045" 'BASIC' 0fc 0x4d00 e5 ‘\' 变量 int _auto_ auto 2-or Turbo_C _169 常量里面 我知道1,4,5,8不合法... 常量
2e32.6 -e-5 "/045" 'BASIC'
0fc 0x4d00 e5 ‘\'
变量
int _auto_ auto 2-or
Turbo_C _169
❼ c语言如何判断实型数据是否合法
通过scanf
先把数据读成字符串
然后 判断字符串中是否只有数字
如果存在+-号,只能是第一个
如果存在小数点,只能有一个
符合以上三条的,是合法的。 否则是非法的。
❽ c语言判断是否合法的标识符.
c++里面的标识符是以字母或下滑线打头,后面加上任意数字,字母,下划线.ff
ai_2里面有个空格,所以不是标识符.
画个有限状态自动机就很清楚了
比如s代表开始状态,s1代表标识符首字合法状态,es代表输入合法,ef代表输入非法.a代表字母或下滑线,
b代表任意数字,字母,下划线,e代表结束符,那么自动机如下
s下输入字符属于a的话进入s1,否则经入ef;
s1下输入字符属于a或b,进入es,否则进入ef
es下输入字符属于a或b,进入es,否则进入ef
ef下输入结束符号,进入最终状态,并且得到输入的不是标识符
es下输入结束符号,进入最终状态,并且得到输入的是标识符
❾ C语言中如何判断是不是合法转义字符
'