C:验证输入数组元素
代码提示用户输入一个混合类型值的字符串(该字符串可以包含一位整数、特殊字符,如“-”或单个字符),并将输入逐字存储到字符数组C:验证输入数组元素,c,arrays,string,C,Arrays,String,代码提示用户输入一个混合类型值的字符串(该字符串可以包含一位整数、特殊字符,如“-”或单个字符),并将输入逐字存储到字符数组字符数组[10] 然后,我编写了一个for循环来遍历每个元素,以检查是否存在任何无效字符(即不是一个单位数整数、不是“-”的特殊字符或不是我选择的单个字符) 但是,无论输入是什么(即使输入仅包含所需字符),无效字符的错误消息始终显示。我通过逐个打印每个元素来检查数组中存储的内容,它们看起来很好。为此,我应该如何修复代码 int main(void){ char in[10
字符数组[10]
然后,我编写了一个for循环来遍历每个元素,以检查是否存在任何无效字符(即不是一个单位数整数、不是“-”的特殊字符或不是我选择的单个字符)
但是,无论输入是什么(即使输入仅包含所需字符),无效字符的错误消息始终显示。我通过逐个打印每个元素来检查数组中存储的内容,它们看起来很好。为此,我应该如何修复代码
int main(void){
char in[10];
printf("Enter only 0-9 or '-' or 'w':");
scanf("%s", in);
getchar();
int i;
for(i = 0; i < 11; i++){
while(in[i] != '0' || in[i] != '1' || in[i] != '2' || in[i] != '3' ||
in[i] != '4' || in[i] != '5' || in[i] != '6' || in[i] != '7' ||
in[i] != '8' || in[i] != '9' || in[i] != '-' || in[i] != 'x')
{
printf("Error: Invalid input\n");
printf("Enter another one:");
scanf("%s", in);
getchar();
i = 0;
}
}
}
int main(无效){
[10]中的char;
printf(“仅输入0-9或“-”或“w:”);
扫描频率(“%s”,英寸);
getchar();
int i;
对于(i=0;i<11;i++){
while(in[i]!=“0”| in[i]!=“1”| in[i]!=“2”| in[i]!=“3”|
在[i]!=“4”|在[i]!=“5”|在[i]!=“6”|在[i]!=“7”|
在[i]!='8'|在[i]!='9'|在[i]!='-'|在[i]!='x')
{
printf(“错误:无效输入\n”);
printf(“输入另一个:”);
扫描频率(“%s”,英寸);
getchar();
i=0;
}
}
}
条件在[i]!='0'| | in[i]!='1'…
将始终为真,因为单个字符始终为!='0'
或!='1'
。你可能在[i]中的意思是!='[i]!='1'
(i=0;i<10;i++)应该是
,而不是11
,因为这会超出数组边界。错误是因为迭代条件应该是i<10
(否则您访问的位置10
,超出数组限制)
您还应该检查字符\0
,它表示字符串的结尾,并停止检查密码
正如Stephen指出的,您还应该使用&&
检查您的条件
应该使用if
而不是while,否则将进入无限循环
正如其他用户指出的那样,getchar()
不是必需的
最后,您可以这样更好地进行检查:
if ((in[i] < '0' || in[i] > '9') && in[i] != '-' && in[i] != 'x') {
// bad character found
}
最好使用isdigit()
函数,而不是不必要的数字检查。问题是,在执行sscanf
之后,您正在调用getchar()
。。为什么?如果你有一个变量a
,条件(a!=1 | | a!=2)
将始终返回true,因为如果a
不是1
,那么该条件基于(a!=1)
,如果a
是1
,那么该条件基于(a!=2)
。您的语句在[i]!='0'| | in[i]!='1'| |…
始终为真。for(i=0;i<11;i++){
在i==10
-->for(i=0;i<10;i++){
@t0mm13b最有可能清空缓冲区,因为scanf
保留了换行符。可能更慢,但更容易阅读:if(!strchr(“0123456789-x”,in[i]))…提到换行符也将在缓冲区中可能有用。@t0mm13b:%s
让scanf
跳过下一轮中的前导空格……以及不必要的getchar
获取换行符。
char in[10];
bool badInput = true;
while (badInput) {
printf("Enter only 0-9 or '-' or 'w':");
scanf("%s", in);
badInput = false;
if (in[0] == '\0') {
// no input, whoops
badInput = true;
}
for (int i = 0; i < 10 && !badInput && in[i] != '\0'; i++) {
if ((in[i] < '0' || in[i] > '9') && in[i] != '-' && in[i] != 'x') {
badInput = true;
printf("Error: Invalid input\n");
}
}
}