2017-04-03 35 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)'。我认为你只需要一个循环来显示条目和'if(* answer ==' - ')j - '和if(* answer =='+')j ++'以及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);