2017-04-03 23 views
0

名前のリストを「スクロール」しようとしていますが、スクロール部分が正しく表示されていますが、後方に移動する方法(スクロールアップ)がわかりません。私はエラーがi + j -1にありますが、私はちょうどセグメンテーション違反なしで正しい出力を得ることができません。これは私が仮定している負の数にアクセスしようとしているためです。Cプログラミング:逆順のリスト

int i,list,j = 1; 
char answer [5]; 
do { 
    if (strcmp(answer, "+") == 0) { 
     printf("Number of Contacts = %d\n", count); 
     for(i=1;i<6;i++) { 
      if ((i + j) - 1 == count) { 
       printf("end of list\n"); 
       break; 
      } else { 
       list = i + j; 
       if(strcmp(contactData[(i+j)-1].company_name," ") == 0) { 
        printf("%d.\t%s %s\n", list, contactData[(i+j)-1].first_name, contactData[(i+j)-1].last_name); 
       } else { 
        printf("%d.\t%s\n", list, contactData[(i+j)-1].company_name); 
       } 
      } 
      } 
     } 

    if (strcmp(answer, "-") == 0) { 
     printf("Number of Contacts = %d\n", count); 
     for(i=1;i<6;i++) { 
      if ((i + j - 1) < 0) { 
       printf("end of list\n"); 
       break; 
      } else { 
       list = j - i; 
       if(strcmp(contactData[(j-i)-1].company_name," ") == 0) { 
        printf("%d.\t%s %s\n", list, contactData[(j-i)-1].first_name, contactData[(j-i)-1].last_name); 
       } else { 
        printf("%d.\t%s\n", list, contactData[(j-i)-1].company_name); 
       } 
      } 
      } 
     } 

     printf("Action(+,-,#,A,X):"); 
     scanf("%s", answer); 
     getchar(); 
     j++; 

    } while (1) 

これが私の出力です:

Number of Contacts = 14 
1.  Chiraq 
2.  Cobra 
3.  Andre D'Souza 
4.  Gucci 
5.  Jordan 
Action(+,-,#,A,X):+ 
Number of Contacts = 14 
2.  Cobra 
3.  Andre D'Souza 
4.  Gucci 
5.  Jordan 
6.  Migos 
Action(+,-,#,A,X):+ 
Number of Contacts = 14 
3.  Andre D'Souza 
4.  Gucci 
5.  Jordan 
6.  Migos 
7.  North Face 
+2

https://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – Yunnosch

+1

提供[MCVE]。 – BLUEPIXY

+0

配列は '[0]'で始まります。 'j = 0'と' i = 0'で始めるべきです。もしあなたのスクロール位置がjなら、なぜ全ての入力に 'j ++ 'をしますか?リストを逆順に表示しないので、 'if((i + j-1)<0)'をテストする必要はありません。私はあなたがエントリを表示するために必要なのはループ1つだけで、jのテストでは 'if(* answer == ' - ')j - 'と 'if(* answer == '+')j ++' – Holger

答えて

0

あなたcontactData配列が[0]から始まり、あなたのために働く可能性があり[count-1]でこの例を終了した場合。

int i,list,j = 0; 
char answer [5]; 
do { 
    printf("Number of Contacts = %d\n", count); 
    for(i=0;i<6;i++) { 
     list = i+j; 
     if (list >= count) { 
      printf("end of list\n"); 
      break; 
     } 
     if(strcmp(contactData[list].company_name," ") == 0) { 
      printf("%d.\t%s %s\n", list+1, contactData[(list].first_name, contactData[list].last_name); 
     } else { 
      printf("%d.\t%s\n", list+1, contactData[(list].company_name); 
     } 
    } 

    printf("Action(+,-,#,A,X):"); 
    scanf("%s", answer); 
    if(strcmp(answer, "+") == 0) { 
     if((j+1)<count) j++; 
    } 
    else if(strcmp(answer, "-") == 0) { 
     if(j>0) j--; 
    } 
} while (1);