-3

我正在编写一个 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]# 

即使只输入了第一个学生的详细信息,它也会退出程序。帮我。

4

3 回答 3

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 之前的 20 指定 name 变量的字符串允许的宽度。如果 name 的输入字符串的长度超过 20,它将弄乱其他变量的输入,程序将终止或给出意外的行为。

于 2013-07-06T02:25:16.270 回答
0

这:

scanf("%d%c%f"

应该更像这样:

scanf("%d %s %f"
于 2013-07-06T02:20:56.877 回答
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);
于 2013-07-06T02:35:31.690 回答