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
https://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – Yunnosch
提供[MCVE]。 – BLUEPIXY
数组从'[0]'开始。你应该尝试以'j = 0'和'i = 0'开头。如果j是你的滚动位置,为什么你在每次输入时使用'j ++'?你不会以相反的顺序显示列表,所以不必测试'if((i + j - 1)<0)'。我认为你只需要一个循环来显示条目和'if(* answer ==' - ')j - '和if(* answer =='+')j ++'以及j的一些测试。 – Holger