我正在编写一个C程序,该程序的目标是我只想输入结构中的4个学生详细信息。但我的程序遗漏了一些东西,所以我的程序在输入第一个学生详细信息后退出请看这里
# include <stdio.h>
struct student
{
int no;
char name[20];
float marks;
}s[10];
int main()
{
int i,n;
printf(" enter number of students ");
scanf("%d",&n);
printf(" enter student Number Name marks ");
for(i=0;i<n;i++)
{
scanf("%d%c%f",&s[i].no,&s[i].name,&s[i].marks);
}
return 0;
}
程序在输入一个学生详细信息后退出,即使我选择了4个学生。
我在这里提供的输入为
[root@localhost raja]# gcc -o s s.c
[root@localhost raja]# ./s
enter number of students 4
enter student Number Name marks 1 as 12.03
[root@localhost raja]#
即使在仅输入第一个学生详细信息后退出该计划。 帮助我。
答案 0 :(得分:3)
这是正确的代码
# include <stdio.h>
struct student
{
int no;
char name[20];
float marks;
}s[10];
int main()
{
int i,n;
printf(" enter number of students ");
scanf("%d",&n);
printf(" enter student Number Name marks ");
for(i=0;i<n;i++)
{
scanf("%d%20s%f",&s[i].no,s[i].name,&s[i].marks);
}
return 0;
}
第一个错误是%c应该是%s因为你期望一个字符串而不是一个字符。 第二个是当你期望%s时,你只需要传递变量名,因为它是一个数组,因此是一个指针。 在s之前指定name变量的字符串允许的宽度。如果name的输入字符串的长度超过20,则会搞乱其他变量的输入,程序将终止或出现意外行为。
答案 1 :(得分:0)
此:
scanf("%d%c%f"
应该更像这样:
scanf("%d %s %f"
答案 2 :(得分:0)
这里错了:
scanf("%d%c%f",&s[i].no,&s[i].name,&s[i].marks);
正确的答案是:
scanf("%d%s%f",&s[i].no,&s[i].name,&s[i].marks);