C scanf()不解析我的输入

时间:2013-07-06 02:15:09

标签: c scanf

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

即使在仅输入第一个学生详细信息后退出该计划。 帮助我。

3 个答案:

答案 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);