C语言判断输入新命名的变量名是否正确

问题是这样的,但是代码运行时没有输出想要的结果
//变量名只能由字母、数字、下划线_构成,并且以字母和下划线_开头。
//实际上就是判断是否是一个合法的标识符 不考虑关键字情况
//如:"_ios" 是合法的变量名
//"1oc" 不合法
//"123" 不合法
//"xiaohuang_" 合法
//"_UI*" 不合法
//"#OC" 不合法
//是返回1,不是返回0

代码如下
#include<stdio.h>

#include<math.h>

char *findzimu (char *p, int size);

int main()

{

char array[10] = {};

char *p = array;

char *ret;

int i = 0;

printf("请输入要判断的变量名\n");

for (i = 0; i<10; i++)

{

scanf("%c[^\n]", &p[i]);

}

ret = findzimu(p, 10);

if (ret == NULL)

{

printf("该变量名合法\n");

}

else

{

printf("该变量名不合法\n");

}

return 0;

}

char *findzimu (char *p, int size)

{

char *ret;

int i=0;

while (p[i] != '\0')

{

if ((p[i] == 95) || (p[i] >=65 && p[i]<=90) || (p[i]>=97 && p[i]<=122))

{

for (i = 1; i<10; i++)

{

if ((*(p + i) == 95) || (*(p+i)>=65 && *(p+i)<=90) || (*(p+i)>=97 && *(p+i)<=122))

{

ret = NULL;

}

else

{

break;

}

}

}

}

return ret;

}

看你的代码太复杂了,我直接帮你写了一个,你对比一下:

#include <stdio.h>

int is_char(char c)
{
if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))
{
return 1;
}

return 0;
}

int is_number(char c)
{
return (c >= '0' && c <= '9');
}

int is_valid(const char *var)
{
// 变量名必须以字母或下划线开头
if (!is_char(*var) && *var != '_')
{
return 0;
}

// 后续的字符必须是数字或字母或下划线
while (1)
{
++var;
if (*var == '\0')
{
break;
}

if (!is_char(*var) && !is_number(*var) && *var != '_')
{
return 0;
}
}

return 1;
}

int main()
{
char szVar[100];

printf("Please input a variable: ");
scanf("%s", szVar);
printf("The variable is %s\n", is_valid(szVar) ? "valid" : "invalid");

return 0;
}

Linux 下编译及测试结果如下:

[root@iZ25a38chb4Z lory]# g++ teset.cpp -o test -g3 -Wall
[root@iZ25a38chb4Z lory]# ./test 
Please input a variable: _Hello2
The variable is valid
[root@iZ25a38chb4Z lory]# ./test 
Please input a variable: 2#a
The variable is invalid
[root@iZ25a38chb4Z lory]# ./test 
Please input a variable: _s$s
The variable is invalid
[root@iZ25a38chb4Z lory]# ./test 
Please input a variable: a_2
The variable is valid

温馨提示:答案为网友推荐,仅供参考
相似回答