如何修复我的代码?我有一个包含十六进制值的文本文件。现在我需要将十六进制值转换为二进制值并打印出来。到目前为止,这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#define MAX 1000
int hex_to_binary(char *argv[])
int main(int argc, char *argv[])
{
FILE *file;
file = fopen(argv[1], "r");
char line[100];
while(!feof(file)) {
fgets(line, 100, file);
hex_to_binary(line);
}
fclose(file);
return 0;
}
int hex_to_binary(char *argv[]) {
char binaryNumber[MAX], hexaDecimal[MAX];
long int i = 0;
scanf(“%s”, argv[1]);
printf("\nEquivalent binary value: ");
while(hexaDecimal[i]) {
switch(hexaDecimal[i]) {
case '0': printf("0000"); break;
case '1': printf("0001"); break;
case '2': printf("0010"); break;
case '3': printf("0011"); break;
case '4': printf("0100"); break;
case '5': printf("0101"); break;
case '6': printf("0110"); break;
case '7': printf("0111"); break;
case '8': printf("1000"); break;
case '9': printf("1001"); break;
case 'A': printf("1010"); break;
case 'B': printf("1011"); break;
case 'C': printf("1100"); break;
case 'D': printf("1101"); break;
case 'E': printf("1110"); break;
case 'F': printf("1111"); break;
case 'a': printf("1010"); break;
case 'b': printf("1011"); break;
case 'c': printf("1100"); break;
case 'd': printf("1101"); break;
case 'e': printf("1110"); break;
case 'f': printf("1111"); break;
default: printf("\nInvalid hexadecimal digit %c ", hexaDecimal[i]); return 0;
}
i++;
}
return 0;
}
我不断收到错误消息,例如:
part1_V2.c: In function ‘hex_to_binary’:
part1_V2.c:8: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
part1_V2.c:22: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
part1_V2.c:26: error: stray ‘\342’ in program
part1_V2.c:26: error: stray ‘\200’ in program
part1_V2.c:26: error: stray ‘\234’ in program
part1_V2.c:26: error: stray ‘\342’ in program
part1_V2.c:26: error: stray ‘\200’ in program
part1_V2.c:26: error: stray ‘\235’ in program
part1_V2.c:59: error: expected ‘{’ at end of input
我的代码可以正常工作,但现在输出有问题:
传递给主函数的文本文件包含:
“1283”(第 1 行) “5105”(下一行)
这些是文件中的十六进制值。所以当我运行程序时,我得到输出:
等效二进制值:0001001010000011
无效的十六进制数字
无效的十六进制数字
等效二进制值:0101000100000101
为什么我得到无效的十六进制数字输出?是因为它试图转换“ " 或空格到二进制文件?
您的代码中似乎有几个非 ASCII 字符,例如“和”,应该是".
剩下的就是语法和类型错误。
您的代码中存在一些语法错误。试试这个修改后的代码。如果您将正确的参数传递给 main() 那么它应该可以工作:
#include <stdio.h>
int hex_to_binary(char*);
int main(int argc, char *argv[])
{
FILE *file;
file = fopen(argv[1],"r");
char line[100];
while(!feof(file)){
fgets(line,100,file);
hex_to_binary(line);
}
fclose(file);
getchar();
return 0;
}
int hex_to_binary(char* hex_string)
{
int i=0;
printf("\nEquivalent binary value: ");
while(hex_string[i])
{
switch(hex_string[i])
{
case '0': printf("0000"); break;
case '1': printf("0001"); break;
case '2': printf("0010"); break;
case '3': printf("0011"); break;
case '4': printf("0100"); break;
case '5': printf("0101"); break;
case '6': printf("0110"); break;
case '7': printf("0111"); break;
case '8': printf("1000"); break;
case '9': printf("1001"); break;
case 'A': printf("1010"); break;
case 'B': printf("1011"); break;
case 'C': printf("1100"); break;
case 'D': printf("1101"); break;
case 'E': printf("1110"); break;
case 'F': printf("1111"); break;
case 'a': printf("1010"); break;
case 'b': printf("1011"); break;
case 'c': printf("1100"); break;
case 'd': printf("1101"); break;
case 'e': printf("1110"); break;
case 'f': printf("1111"); break;
default: printf("\nInvalid hexadecimal digit %c ", hex_string[i]);
}
i++;
}
return 0;
}
您的第一个小错误是在第 5 行的函数定义处。在末尾添加一个分号:
int hex_to_binary(char *argv[]);
也没有用,所以删除行:
scanf(“%s”,argv[1]);
并重写 while 循环:
while(hexaDecimal[i]!='\n' && hexaDecimal[i]!='\0')
{
switch(hexaDecimal[i])
{
...
}
i++;
}
注意
i++
在循环内。再加上末尾的return 0
语句在任何函数之外。把它搬进来。
希望这有帮助!
如评论中所述,您在第 5 行缺少
;
。
缺少
;
会导致一连串的错误,因为编译器正在寻找一些东西来结束语句(它没有被 ;
结束)。
我要进入教师模式所以如果我居高临下我提前道歉
牢记这一点,尝试依次修复每个错误。错误消息看起来总是很技术性,但如果你停下来阅读它,它会提供很多信息。
所以对于你的第一个错误,在第 8 行,它声明它期待的是
{
。由于这是main函数的开始,所以第7-8行的内容是正确的,所以错误的一定是before这两行
在你的 main 函数之前是一个函数原型,它......aha......缺少分号.
关于说
stray \xxx in program
的错误,这可能是因为您从word文档或网站复制了scanf("%s", argv[1])
行,并且复制了一对格式化的引号。
要修复,只需删除引号并手动输入即可。