簡體   English   中英

為什么不是C中的char數組第一個元素ASCII

[英]Why isnt char array first element ASCII in C

所以我對 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. 您 scanf 可能會寫在數組邊界之外
  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 Hex\n", input[i], input[i]);
    }
}

https://godbolt.org/z/rKW5en

#define ARR_LEN 4

應該

#define ARR_LEN 5

另外, char input[ARR_LEN] = {0}; 不需要初始化,因為 scanf 將用 4 個字符加上最后的0填充數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM