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