C编程:如何从特定元素继续向数组输入

C编程:如何从特定元素继续向数组输入,c,arrays,C,Arrays,所以,基本上,这只是整个计划的一部分。我在这里试图做的(但不是真正成功的)是将10个值输入到我的数组中。所以,当我按下“e”键时,我可以在数组中输入值,直到输入0为止。我想做的是能够从我在阵列中结束的地方继续。这意味着,如果我在前三个元素中输入值,下次按下“e”时,我想从元素4继续,当它达到10个值时,我不能再输入任何值。我尝试了一些if语句和不同的循环,但似乎都不正确。我还是个新手,所以任何帮助都将不胜感激 这是我的密码 int main(void) { char choice; prin

所以,基本上,这只是整个计划的一部分。我在这里试图做的(但不是真正成功的)是将10个值输入到我的数组中。所以,当我按下“e”键时,我可以在数组中输入值,直到输入0为止。我想做的是能够从我在阵列中结束的地方继续。这意味着,如果我在前三个元素中输入值,下次按下“e”时,我想从元素4继续,当它达到10个值时,我不能再输入任何值。我尝试了一些if语句和不同的循环,但似乎都不正确。我还是个新手,所以任何帮助都将不胜感激

这是我的密码

int main(void)
{

char choice;

printf("Measurement tool 1.2\n");
loadMenu(choice);

return 0;
}

 void loadMenu(char theChoice)
        {
            int values[X]= {0}; 
            float counter = 0.0f;
            int i;
            do
            {
                        printf("VECRQ? ");
                        scanf(" %c",&theChoice);


                            switch(theChoice)
                            {
                                case 'v':
                                printf("[");

                                for(i=0; i<X; i++)
                                    {
                                    printf("%d ",values[i]);
                                    }

                                printf("]\n");
                                break;

                                case 'e': 
                                scanValue(values);
                                break;

                                case 'c':
                                maxmin(values, counter);
                                average(values, counter);
                                normValue(values);
                                break;

                                case 'r':
                                for(i=0; i<X; i++)
                                {
                                    values[i] = 0;
                                }
                                printf("Measurement values cleared!\n");
                                break;

                                case 'q':
                                printf("Exit measurement tool!\n");
                                break;

                                default:
                                printf("Wrong character! Choose between VECRQ.\n");
                            }
            } while(theChoice != 'q');


        }

void scanValue(int theValues[])
{
int i; int j=0;

    {   
    for(i=0;i<X;i++)
    {
        printf("Enter measurement %d (or 0):",i+1);
        scanf("%d",&theValues[i]);
        j=i;
        if(theValues[i]==0)
            break;
    }



            for(j; j<X; j++)
            {
            printf("Enter measurement %d (or 0):\n",j+1);
                scanf(" %d",&theValues[j]);

                if(theValues[j]==0)
                    break;
            }

 }
int main(无效)
{
字符选择;
printf(“测量工具1.2\n”);
加载菜单(选择);
返回0;
}
无效加载菜单(字符选择)
{
int值[X]={0};
浮动计数器=0.0f;
int i;
做
{
printf(“VECRQ?”);
scanf(“%c”和选择);
开关(选择)
{
案例“v”:
printf(“[”);

对于(i=0;i您的
scanValues
函数每次都从0开始,因此它不会注意到您是否已经在数组中输入了任何内容

如果您首先在数组中循环寻找零开始,如下所示:

for (i = 0; i < X; ++i)
{
    if (theValues[i] == 0)
    {
        // We found where we last left off
        break;
    }
}
(i=0;i { 如果(值[i]==0) { //我们找到了上次停下来的地方 打破 } }
然后,
i
将被设置到第一个零的位置。如果不在现有循环中重新初始化
i
,它将保持相同的值,并从那里一直到
X
(如果它已经在
X
,因为所有的值都不是零,循环将不会发生)

j
上进行另一个循环意味着所有值都将被读取多次;您应该完全摆脱该循环,因为
i
循环可以处理它


如果执行此操作,则需要确保从数组元素都为零开始;因为您已经在
loadMenu
的顶部执行了此操作,这应该很好。

如果要在scanValue函数中提醒上次使用的数组索引,可以轻松使用函数membe的静态修饰符例如:

void scanValue(int theValues[]) {
  static int i;
  //... the logic of your function goes here
}
在函数中声明静态变量时,此变量的值在函数的所有调用之间保持不变。例如,请看以下代码:

void main() {
  getNextIdx(); //Will return 1
  getNextIdx(); //Will return 2
}

void getNextIdx() {
  static int i = 0;
  i++;
  return i;
}
你可以利用这个C语言资源来简化你想要的。当然,如果我理解你真正想要的

注:有时您可能需要清除函数中静态变量的值,因此,例如,您可以传递一个布尔值,让函数知道您要清除该变量,并在函数中生成清除该变量的逻辑


希望我能帮助您。

如果0是退出元素,只需将数组的所有值设置为0,然后再次输入时,只需找到数组第一个元素的索引等于0。这样,或者有一个计数器来记住上一个输入阶段停止的位置。如果您想继续,即使
0之后选择了
q
e
中,您需要将其保存在一个文件中。好奇的code会
printf(“VECRQ?”);
在VECRQ之间选择“
”,然后打开小写字母。