【发布时间】: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=0和i=0开始。如果 j 是您的滚动位置,为什么您在每次输入时都j++?您不会以相反的顺序显示列表,因此不必测试if ((i + j - 1) < 0)。我认为你只需要一个循环来显示条目和if(*answer=='-') j--和if(*answer=='+') j++,并对 j 进行一些测试。