#include <stdio.h> #include <math.h> int main() { int i,k,l,x,y,z; char a[100],b[100]; i=0,l=-1,x=0,z=0; while ((a[i]=getchar())!='#'){ i++; } a[i]='\0'; for(k=0;k<i;k++){ if((a[k]>='0'&&a[k]<='9')||(a[k]>='A'&&a[k]<='F')||(a[k]>='a'&&a[k]<='f')){ l++; b[l]=a[k]; } } b[l+1]='\0'; while(a[x]!=b[0]){ x++; } for(k=0;k<x;k++){ if(a[k]=='-'){ printf("-"); break; } } for(k=0;k<=l;k++){ if(b[k]>='a'&&b[k]<='f'){ y=b[k]-'a'+10; } else if(b[k]>='A'&&b[k]<='F'){ y=b[k]-'A'+10; } else{ y=b[k]; } z=z+y*pow(16,l-k); } printf("%d,%d,%d",z,l,x); }我的代码哪里出错了
时间: 2024-04-06 13:29:34 浏览: 52
这段代码编译不会出错,但是存在逻辑上的问题。
1. 在输入字符串时,没有考虑到可能输入空格或者其他特殊字符,这会导致后面的处理出现问题。
2. 在转换16进制数时,没有考虑到负数的情况,需要增加对负号的处理。
3. 在计算16进制数的十进制值时,计算公式错误,应该是 $z=z+y\times16^{l-k}$。
建议你在编写代码时,要考虑全面,尽可能考虑到所有的情况。同时,在遇到问题时,可以使用调试工具逐行调试,找出问题所在。
阅读全文