添加并列出结构数组

时间:2015-07-14 09:17:04

标签: c++ c

我在使用结构数组时遇到了一些问题,只需列出它们并添加它们即可。我对发生的事情并不是很确定,我已经搜索了几个朋友,并且他们已经建议它与内存分配有关,另一个人说不需要内存分配,我的代码中存在问题。

我一直无法找到问题所在,并且想知道是否有人能够指出我走向错误的方向。

如果代码看起来不正确,我很抱歉 - 不确定如何在网站上实现它。

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    typedef struct data{
      int testone;
      int testtwo;
    }data;

    struct data _dataStore[25];
    int dataCount = 0;

    int addData(struct data __dataStore[dataCount]){

      printf("\n\t\t\tPacket Source - ");
      scanf("%i", &_dataStore[dataCount].testone);

      printf("\t\t\tPacket Destination - ");
      scanf("%i", &_dataStore[dataCount].testtwo);

      system("CLS");

      return 0;
    }

    void listData(struct data _dataStore[25]){

      int i = 0;

      for (i = 0; i < dataCount; i++){
        printf("data stored - %i",dataCount);
        printf("%i___%i \n",          _dataStore[dataCount].testone,_dataStore[dataCount].testtwo);
      }
    }


    int main(){

      char choice;

      do{
        printf("\t\t\t Counter - %i", dataCount+1);
        printf("\n\t\t\t1 - Add data. \n");
        printf("\t\t\t2 - List data. \n");
        printf("\n\t\t\tEnter your choice - ");

        fflush(stdin); 
        choice = getchar();
        getchar();

        switch(choice){ 
          case '1':
            addData(&_dataStore[dataCount]);
            dataCount++;
            system("CLS");
            break;
          case '2':
            system("CLS");
            listData(&_dataStore[dataCount]);
            break;
          default:
            printf("Invalid input \n");
            break;
        }
      }while (choice != '5');

      return 0;
    }

2 个答案:

答案 0 :(得分:2)

有很多明显的错误,例如:

for (i = 0; i < dataCount; i++){
        printf("data stored - %i",dataCount);
        printf("%i___%i \n",          _dataStore[dataCount].testone,_dataStore[dataCount].testtwo);
      }
     }

我怀疑你想说_dataStore[i]。另外,我建议使用更合理的函数原型:

int addData(struct data*  __dataStore, int arrayLen)

答案 1 :(得分:0)

以下是修正后的代码,对我来说很有用:

OLD_REV=$2
NEW_REV=$3

if [ $OLD_REV == "0000000000000000000000000000000000000000" ]; then
    OLD_REV=$(git merge-base master $NEW_REV)
fi;

git diff --name-only $OLD_REV $NEW_REV

请注意以下内容:读/写整数与%d不是%i,listData()中的索引应该是我不是dataCount,我删除了函数不需要的参数,因为变量是全局的,我在switch()中添加了一个新案例,以便在退出时打印出更好的消息,而不是&#34;无效的输入&#34;。

您使用的所有变量都是静态分配的,因此您不需要内存分配。