C语言问题,为什么我的第一个for循环只能执行一次,然后直接跳到return了?

# include <stdio.h>
# include <malloc.h>
struct student
{
int age;
double score;
char name[30];
};
int main(void)
{
struct student * p, t;
int len, i, j;
printf("输入学生个数:");
printf("len=");
scanf_s("%d", &len);
p = (struct student *)malloc(len * sizeof(struct student));
for (i = 1; i <= len; ++i)
{
printf("输入第%d学生的信息:\n", i);
printf("输入学生年龄:");
scanf_s("%d", &p[i]);
printf("输入学生成绩:");
scanf_s("%lf", &p[i]);
printf("输入学生姓名:");
scanf_s("%s", (p + i)->name);
}
printf("\n\n");
for (i = 0; i < len - 1; ++i)
{
for (j = 0; j < len - 1 - i;++j)
if (p[j].score > p[j + 1].score)
{
t = p[j];
p[j] = p[j + 1];
p[j + 1] = t;
}
}
for (i = 1; i <= len; ++i)
{
printf("第%d个学生的信息是:\n\n", i);
printf("年纪是%d\n\n", p[i].age);
printf("分数是%lf\n\n", p[i].score);
printf("姓名是%s\n\n\n\n", p[i].name);
}
return 0;
}
printf("输入学生年龄:");
scanf_s("%d", &p[i].age);
printf("输入学生成绩:");
scanf_s("%lf", &p[i].score);
忘记打了, 加上了 还是只能执行一次然后直接结束本程序

# include <stdio.h>
# include <malloc.h>
struct student
{
int age;
double score;
char name[30];
};
int main(void)
{
struct student * p, t;
int len, i, j;
printf("输入学生个数:");
printf("len=");
scanf_s("%d", &len);
p = (struct student *)malloc(len * sizeof(struct student));
for (i = 0; i < len; ++i)
{
printf("输入第%d学生的信息:\n", i+1);
printf("输入学生年龄:");
scanf_s("%d", &p[i].age);
printf("输入学生成绩:");
scanf_s("%lf", &p[i].score);
printf("输入学生姓名:");
scanf_s("%s", (p + i)->name);
}
printf("\n\n");
for (i = 0; i < len - 1; ++i)
{
for (j = 0; j < len - 1 - i;++j)
if (p[j].score > p[j + 1].score)
{
t = p[j];
p[j] = p[j + 1];
p[j + 1] = t;
}
}
for (i = 0; i < len; ++i)
{
printf("第%d个学生的信息是:\n\n", i+1);
printf("年纪是%d\n\n", p[i].age);
printf("分数是%lf\n\n", p[i].score);
printf("姓名是%s\n\n\n\n", p[i].name);
}
return 0;
}追问

改了 还是不行, 我觉得问题出在第一个for循环中,但是我找不出来。

追答

scanf_s("%lf", &p[i].score);改成scanf_s("%f", &p[i].score);试试。

追问

还是不行。。。

追答

每个scanf_s函数调用的后面都加上getchar();试试。

每个scanf_s函数调用的后面都加上getchar();试试。

追问

怎么改?没看懂

追答

printf("输入第%d学生的信息:\n", i+1);
printf("输入学生年龄:");
scanf_s("%d", &p[i].age);
getchar();
printf("输入学生成绩:"); scanf_s("%lf", &p[i].score);
getchar();
printf("输入学生姓名:");
scanf_s("%s", (p + i)->name);
getchar();

温馨提示:内容为网友见解,仅供参考
第1个回答  2017-09-02
可能是你输入的len值有误导致循环直接跳出追问

不会吧?len的值我都试过了30不行,5也不行,3也一样 直接跳出程序。剩下的代码全不执行,我用的是VS2013

c语言一个死循环中为什么执行完一个功能函数就退出了?
1、你在死循环中包含了break语句或return,比如if满足某个条件就执行break或者return。2、你在循环中或调用的函数中,执行了exit函数,直接结束了整个程序。3、你的代码有错,比如使用野指针,越界访问数组等不可控行为。4、内存不足,程序终止,比如循环malloc申请内存,但没有释放,又或者调用递归函数造...

c语言问题;为何执行只能运行一次
(这个程序死循环了。~~)

C语言FOR错误执行一次就结束了。帮忙看看把
for (i=1;i<=5;i=i++);后面多了个“;”,循环里面其实是空语句,下来执行的是打印语句,所以只出现一次aaa。要细心啊,兄弟。

C语言for循环被跳过
因为在上面的scanf里面,你输入了4 回车, 4当做数字存进n,回车被当做第一个输入的字符串存进了a[0](其实a[0]是空字符串,因为gets不保存回车符)。解决方法很简单,我们忽略掉4后面那个回车就好了。只要把 scanf("%d",&n);改成 scanf("%d%*c",&n);就行了。 这里%*c的意思是读入一个...

C语言,可不可以,前面一个for循环无限循环着,然后还能继续执行这后面的程...
不行,程序的特征之一就是“有穷性”,你可以开一线程不断输出i,但不是以你这种方式。比如while(true){}。不能在同一线程中达到你想要的效果

为什么我这次写的c语言for循环没用,仅仅执行一次,谢谢指教
include <stdio.h>#include <stdlib.h>int main(){int a,i,k;scanf("%d",&k);for(i=1;i<=k;i++){char b[100];scanf("%d",&a);getchar();itoa(a,b,2);printf("%s\\n",b);}return 0;}

c语言,为什么我的代码只能输入一组字符,那错了,如图?
你要把你的输出放在for循环的外面,不要放在第一个for循环的里面的啊,你放在都第一个for循环的里面,输出的只是你输入的第一行的统计结果而已,你明明需要的是多行的统计结果啊,你需要把你统计到最后的结果输出到屏幕上啊。程序应该是没问题的,只是输出语句的位置,导致输入第一句之后就跳出了统计...

有关C语言For循环跳出的问题!
简单说来,一个break只能跳出一层循环,你第一个方法,连续break两次,条件都一样,可以从两层循环里跳出来。第二个跳出一层循环后,还在外层循环内,所以继续循环,还会打印其他的结果,另外你输出的地方也不一样。

c语言中关于for循环的问题,急急急!!!
死循环,无限次 第二个的理由跟第一个一样,表达式k=0的值为0,所以一次都不运行 第三个是关系判断,如果k的值为0,k==0的值才为1,否则为0,第一次循环k=0,所以第一次运行符合条件,第一次循环结束后k++,k的值成为1,第二次k==0的值就是0了,所以只循环1次 ...

请问c语言中只循环了一次怎么解决?
楼主,我看了好几遍 for(i=bb;i>-1;i--);发现这行语句有问题,需要去掉行结尾的分号,它有循环却不做事呀,;是for语句块的结尾,而后面的{}成了个只运行一次的语句块。如图

相似回答