我试图编写一个函数将十六进制数转换为十进制数,但是我遇到的问题是我的第一个函数的for循环中的错误。我无法捕获任何字符是什么在我的数组的末尾,它又循环了一次。我已经删除了额外的代码,只留下了相关的部分。我认为这可以通过使用get / putchar来解决,但我真的想知道造成它的原因是什么。谢谢!
#include <stdio.h>
#include <ctype.h>
#include <stdio.h>
int main(){
int check;
char num_input[20];
scanf("%s",num_input);
int hex_check(char *hex_input){
int i;
int n;
for(i=0;hex_input[i]!='\n' || hex_input[i]!=EOF;i++){
if(isxdigit(hex_input[i])!=0){
n++;
printf("\nTRUE");
}
else{
n=0;
printf("\nFALSE");
return n;
}
}
return n;
}
check=hex_check(num_input);
printf("\n%d",check);
return 0;
}
输入123时的输出(我使用n将数字传递给函数的其他部分,如果数字不是十六进制则为0):
TRUE
TRUE
TRUE
FALSE
0
答案 0 :(得分:4)
这是因为条件
hex_input[i]!='\n' || hex_input[i]!=EOF
始终为true:输入不能同时为'\n'
和EOF
。
另一个问题是你的字符串中永远不会看到EOF
;但是,您将看到一个空终止符,即'\0'
更改为
hex_input[i]!='\n' && hex_input[i]!='\0'
解决问题。
您缺少的另一件事是n
的初始化:您应该在循环开始递增之前将其设置为零。
最后,ANSI标准不允许嵌套函数,使您的代码不可移植。考虑将hex_check
的代码移动到外层,并声明它static
以确保其他模块不可见。