2017-09-15 84 views
1

所以,基本上,這只是完整程序的一部分。我在這裏試圖做的(但不是真的成功)是將10個值輸入到我的數組中。所以,當我按下'e'時,我可以輸入數值到我的數組中,直到輸入0爲止。我想要做的就是能夠從我的陣列中離開的位置繼續。這意味着如果我在前三個元素中輸入值,下一次按'e'時,我想從元素4開始繼續,當它達到10個值時,我不能再輸入任何值。我已經嘗試了一些if語句和不同的循環,但似乎無法做到。我仍然很新,所以任何幫助將不勝感激!C編程:如何從某個元素繼續輸入數組

這裏是我的代碼

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; 
      } 

} 
+0

如果0是退出元素,只需將數組的所有值設置爲0,然後再次輸入時,只需找到數組的第一個元素的索引等於0即可。或者需要記住一個計數器你停止了之前的入門階段。 – AntonH

+0

如果要繼續操作,即使'e'中的'0'選擇了'q',您也需要將其保存在文件中。 – BLUEPIXY

+0

好奇的代碼沒有'printf(「VECRQ?」);'&'「在VECRQ之間選擇」'然後打開小寫字母。 – chux

回答

1

scanValues功能從0每一次啓動,因此,如果你已經在陣列中輸入anythig也不會注意到。

如果通過陣列尋找一個在零開始,這樣的第一環:

for (i = 0; i < X; ++i) 
{ 
    if (theValues[i] == 0) 
    { 
     // We found where we last left off 
     break; 
    } 
} 

然後i將被設置爲第一個零的位置。如果你在現有的循環中不重新初始化i,它將保持這個相同的值,並從那裏去X(如果它已經在X,因爲所有的值都是非零的,循環不會發生) 。

再次循環j只是做同樣的事情將意味着所有的值將被多次讀取;因爲你的i循環處理它,你應該完全擺脫那個循環。

如果你這樣做,你需要確保從數組元素開始都是零;既然你已經在loadMenu的頂部做了這個,那應該是好的。

0

如果您想在scanValue函數中提醒上次使用的數組的索引,您可以輕鬆地使用函數成員的靜態修飾符。像:

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語言資源來簡化你想要的。當然,如果我明白你真正想要什麼。

Ps .:有時您可能想要清除函數內部靜態變量的值,例如,爲此,您可以傳遞布爾值以讓函數知道您要清除該變量,並使該邏輯在函數內清除它。

希望我幫你。

相關問題