代码之家  ›  专栏  ›  技术社区  ›  clownzxy

存储char变量上递增的整数

c
  •  0
  • clownzxy  · 技术社区  · 3 年前

    我一直在尝试将1存储到temp,以便下次再次运行该函数时它会递增。这些打印只是为了调试。

    void CreatAccountNumbers(char *startString)
    {
        ACCOUNTNUM accountInfo;
        //this function is for the system generation of bank client account numbers
        int temp; //first int
        temp++;
        char tempChar=temp; //int to char
        tempChar+='0'; 
        char finalString[30]=" ";
        strcpy(finalString,startString);
        printf("\nstartstring:%s",startString);
        printf("\ntempChar:%c",tempChar);
        printf("\nfinal string:%s",finalString);
        finalString[5]+=tempChar;
        temp+=tempChar;
        printf("\nfinal string with tempchar:%s",finalString);
    
        strcpy(accountInfo.sAccountNum,finalString);
        printf("\nvalue on structure:%s",accountInfo.sAccountNum);
    }
    
    0 回复  |  直到 3 年前
        1
  •  0
  •   Darth-CodeX    3 年前

    变量 temp 从未正确初始化。因此,它将产生未定义的行为。

    您可以这样初始化它:

      int temp = 0;
    

    现在 finalString 如果没有正确初始化,应该这样写:

     char finalString[30]= {}; // all elements will be 0
    

    还有,ASCII值 1 不会打印在标准输出上。

        2
  •  0
  •   जलजनक    3 年前

    我想你要找的是这样的东西。

    • 使用 static 用于存储 sequence 数字
    • 序列 将在两次调用之间保留其值以生成下一个帐号。
    • 注意:一旦程序重新启动,该值将重置。您可能想加载最后一个 序列 启动期间从外部来源获取的编号。
    void ai_get_newACnum (const char* ac_prefix, char* new_ac, const size_t naclen) {
        static int sequence = 1;
        snprintf (new_ac, naclen, "%s_%09d", ac_prefix, sequence++);
    }
    

    你可以调用如下结构:sizeof if accountInfo.sAccountNum 是一个字符数组,否则为实际 dynamic-memory 大小

    ai_get_newACnum (startString, accountInfo.sAccountNum, sizeof(accountInfo.sAccountNum));
    

    要测试:

    #define MAX_ACNUM_STRLEN 64
    
    int main (void) {
        char nxtACNumber [MAX_ACNUM_STRLEN];
        for (int ai = 0; ai < 12; ++ai) {
            ai_get_newACnum ("myAcSeq", nxtACNumber, sizeof (nxtACNumber));
            printf ("New Account Number : %s\n", nxtACNumber);
        }
        return 0;
    }
    

    由此产生:

    New Account Number : myAcSeq_000000001
    New Account Number : myAcSeq_000000002
    New Account Number : myAcSeq_000000003
    New Account Number : myAcSeq_000000004
    New Account Number : myAcSeq_000000005
    New Account Number : myAcSeq_000000006
    New Account Number : myAcSeq_000000007
    New Account Number : myAcSeq_000000008
    New Account Number : myAcSeq_000000009
    New Account Number : myAcSeq_000000010
    New Account Number : myAcSeq_000000011
    New Account Number : myAcSeq_000000012