为什么字符数组不是C中的第一个ASCII元素



所以我对C真的很陌生,但我有这个家庭作业,我不知道出了什么问题

#include <stdio.h>
#define ARR_LEN 4
#define HEX_LEN 16
int main (void)
{
char input[ARR_LEN] = {0};
char validHex[HEX_LEN] = "0123456789ABCDEF";
int i, j, isHex = 1;

printf("Enter 4 elements: ");
scanf("%s", input);

for (i = 0, isHex = 1; i < ARR_LEN && isHex == 1; i++)
{
for (j = 0; j < HEX_LEN; j++)
{
printf("input(%c) == validHex(%c)n", input[i], (validHex[j]));
if ((input[i] == validHex[j])) 
{
isHex = 1; 
break;
}
if (j == (HEX_LEN-1)) isHex = 0;
}
}
return 0;
}

它打印出这个:

Enter 4 digits: 0110
input(0) == validHex()
input(0) == validHex(1)
input(0) == validHex(2)
input(0) == validHex(3)
input(0) == validHex(4)
input(0) == validHex(5)
input(0) == validHex(6)
input(0) == validHex(7)
input(0) == validHex(8)
input(0) == validHex(9)
input(0) == validHex(A)
input(0) == validHex(B)
input(0) == validHex(C)
input(0) == validHex(D)
input(0) == validHex(E)
input(0) == validHex(F)

因此,在我看来,validHex[HEX_LEN]中的第一个元素无法读取或类似的内容。该程序的目标是确定字符串是否为十六进制。

  1. 您的数组太短
  2. 您可以在数组边界之外进行扫描
  3. 您通过了字符串(您需要检查输入的字符串长度(以及一些小的变化
#include <stdio.h>
#include <string.h>
#define ARR_LEN 20
int main (void)
{
char input[ARR_LEN];
char validHex[] = "0123456789ABCDEF";
int i, j, isHex = 1;

printf("Enter number: ");
fgets(input, ARR_LEN, stdin);
printf("n");

for (i = 0, isHex = 1; i < strlen(input) && isHex == 1; i++)
{
isHex = 0;
for (j = 0; j < sizeof(validHex) - 1; j++)
{
if ((input[i] == validHex[j])) 
{
isHex = 1; 
break;
}
}
if(isHex)
printf("input('%c' dec(%d) ) == validHex(%d)n", input[i], input[i], j);
else
printf("input('%c' dec(%d) ) is not valid Hexn", input[i], input[i]);
}
}

https://godbolt.org/z/rKW5en

最新更新