【问题标题】:C programming: Reverse ordered listC 编程:逆序列表
【发布时间】:2017-04-03 22:35:59
【问题描述】:

我正在尝试“滚动”一个名称列表,但我不知道如何向后滚动(向上滚动)。 I 错误在于 i + j -1,但如果没有分段错误,我就无法获得正确的输出。这是因为我试图访问我假设的负数。

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

【问题讨论】:

  • 数组从 [0] 开始。您应该尝试从j=0i=0 开始。如果 j 是您的滚动位置,为什么您在每次输入时都j++?您不会以相反的顺序显示列表,因此不必测试if ((i + j - 1) &lt; 0)。我认为你只需要一个循环来显示条目和if(*answer=='-') j--if(*answer=='+') j++,并对 j 进行一些测试。

标签: c sorting for-loop


【解决方案1】:

如果您的 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-10
    • 2011-07-13
    • 1970-01-01
    相关资源
    最近更新 更多