user-0 提问: 求大佬帮忙解决一下问题，实在搞不懂

回复:
user: user-1
content: #include <stdio.h> #include <stdlib.h>  void fail(float(*p)[4], int n);  int main() {     float score[3][4] = { { 55,57,70,60 }, { 60,87,90,81 }, { 90,99,100,98 } };     fail(score, 3);     system("pause");     return 0; }  void fail(float(*p)[4], int n) {     int i, j, k, flag;     for (j = 0; j < n; j++)     {         flag = 0;         for (i = 0; i < 4; i++) {             if (*(*(p + j) + i) < 60)                 flag = 1;             if (flag == 1)             {                 printf("No.%d fails,his scores are:\n", j + 1);                 for (k = 0; k < 4; k++)                     printf("%5.1f", *(*(p + j) + i));                 printf("\n");             }             flag = 0;         }     } } 供参考～ 第三个循环就不能用i了。另外，还得在第二个循环加一个大括号～

user: user-2
content: 因为i的for循环没有加大括号，实际循环体只有if那条语句： for (i = 0; i < 4; i++) if (*(*(p + j) + i) < 60) flag = 1;

user: user-0
content: 引用 2 楼 自信男孩的回复:#include <stdio.h> #include <stdlib.h>  void fail(float(*p)[4], int n);  int main() {     float score[3][4] = { { 55,57,70,60 }, { 60,87,90,81 }, { 90,99,100,98 } };     fail(score, 3);     system("pause");     return 0; }  void fail(float(*p)[4], int n) {     int i, j, k, flag;     for (j = 0; j < n; j++)     {         flag = 0;         for (i = 0; i < 4; i++) {             if (*(*(p + j) + i) < 60)                 flag = 1;             if (flag == 1)             {                 printf("No.%d fails,his scores are:\n", j + 1);                 for (k = 0; k < 4; k++)                     printf("%5.1f", *(*(p + j) + i));                 printf("\n");             }             flag = 0;         }     } } 供参考～ 第三个循环就不能用i了。另外，还得在第二个循环加一个大括号～ 对的，非常非常非常非常感谢。(低于十个字不让评论)

user: user-0
content: 引用 3 楼 user-2的回复:别被楼主带偏了，这个程序本身是对的，后面两个for循环是并列的，所以都用i是没有问题的： #include <stdio.h> #include <stdlib.h> int main() {     void fail(float(*p)[4], int n);     float score[3][4] = { { 55,57,70,60 }, { 60,87,90,81 }, { 90,99,100,98 } };     fail(score, 3);     system("pause");     return 0; } void fail(float(*p)[4], int n) {     int i, j, flag;     for (j = 0; j < n; j++)     {         flag = 0;         for (i = 0; i < 4; i++)             if (*(*(p + j) + i) < 60)                 flag = 1;         if (flag == 1)         {             printf("No.%d fails,his scores are:\n", j + 1);             for (i = 0; i < 4; i++)                 printf("%5.1f", *(*(p + j) + i));             printf("\n");         }     } } 供参考～ 第三个循环就不能用i了。另外，还得在第二个循环加一个大括号～[/quote] 对对，非常感谢，我把i变成x，结果打印了四次成绩单，考生1崩溃哈哈

user: user-2
content: 别被楼主带偏了，这个程序本身是对的，后面两个for循环是并列的，所以都用i是没有问题的： #include <stdio.h> #include <stdlib.h> int main() {     void fail(float(*p)[4], int n);     float score[3][4] = { { 55,57,70,60 }, { 60,87,90,81 }, { 90,99,100,98 } };     fail(score, 3);     system("pause");     return 0; } void fail(float(*p)[4], int n) {     int i, j, flag;     for (j = 0; j < n; j++)     {         flag = 0;         for (i = 0; i < 4; i++)             if (*(*(p + j) + i) < 60)                 flag = 1;         if (flag == 1)         {             printf("No.%d fails,his scores are:\n", j + 1);             for (i = 0; i < 4; i++)                 printf("%5.1f", *(*(p + j) + i));             printf("\n");         }     } } 供参考～ 第三个循环就不能用i了。另外，还得在第二个循环加一个大括号～[/quote]