关于c语言scanf如何输入的问题

#include<stdio.h>structDate{intyear;intmonth;intday;};structStudent{charname[30];intn... #include<stdio.h>
struct Date
{
int year;
int month;
int day;
};
struct Student
{
char name[30];
int num;
char sex;
struct Date birthday;
}student[2];
int main()
{
int i;
printf("input student name num sex birthday\n");
for(i=0;i<10;i++)
{
scanf("%s\n",&student[i].name);/*看上去很复杂的程序,但只是这里有问题,整个程序没有error,但是不知道如何录入信息。请高手指点一下*/
scanf("%d\n",&student[i].num);
scanf("%c\n",&student[i].sex);
scanf("%d %d %d\n",&student[i].birthday.year,&student[i].birthday.month,&student[i].birthday.day);
}
for(i=0;i<10;i++)
{
printf("-------------information----------------\n");
printf("Name : %s\n",student[i].name);
printf("Student number: %d\n",student[i].num);
printf("Sex: %c\n",student[i].sex);
printf("Birthday: %d %d %d\n",student[i].birthday.year,student[i].birthday.month,student[i].birthday.day);
}
展开
 我来答
味悠菲如稀r
2011-07-27 · 超过12用户采纳过TA的回答
知道答主
回答量:18
采纳率:0%
帮助的人:25.8万
展开全部

#include<stdio.h>

struct Date 

{

int year;

int month;

int day;

};

struct Student

{

char name[30];

int num;

char sex;

struct Date birthday;

}student[2];

int main()

{

   int i;

   printf("input student's name num sex birthday\n");

   for(i=0;i<2;i++)

scanf("%s %d %c %d %d %d", student[i].name, &student[i].num, &student[i].sex, &student[i].birthday.year,&student[i].birthday.month,&student[i].birthday.day); //注意第一个不用&,因为它是字符数组

  for(i=0;i<2;i++)

  {

   printf("-------------information----------------\n");

   printf("Name : %s\n", student[i].name);

   printf("Student number: %d\n", student[i].num);

   printf("Sex: %c\n", student[i].sex);

   printf("Birthday: %d %d %d\n", student[i].birthday.year, student[i].birthday.month, student[i].birthday.day);

  }

  return 0;

}

这是我重新给你修改的程序,请再阅读一遍,附带我的测试结果,希望能帮助到你!

追问
scanf("%s %d %c %d %d %d", student[i].name, &student[i].num, &student[i].sex, &student[i].birthday.year,&student[i].birthday.month,&student[i].birthday.day); //注意第一个不用&,因为它是字符数组
这个好,好省事啊。。。那如果有很多东西,都写在一起不是会乱吗?如果就是像我写的那样,分开,怎么就不行了呢?谢谢高手
追答
要分开也是可以的,程序所要修改的部分如下:
注意%s,%d,%c前面有一个空格;
///////////////////////////////////////////////////////////////////////////////////
for(i=0;i<2;i++)
{
scanf(" %s", student[i].name); //注意%s前面的空格
scanf(" %d", &student[i].num);//同上
scanf(" %c", &student[i].sex);
scanf(" %d %d %d", &student[i].birthday.year,&student[i].birthday.month,&student[i].birthday.day);

///////////////////////////////////////////////////////////////////////////////
最后输入还是按照下面的格式:
jack 10 b 1991 05 06
mary 11 g 1992 04 08
花斑璐ro
2011-07-27 · TA获得超过6439个赞
知道大有可为答主
回答量:6716
采纳率:0%
帮助的人:8400万
展开全部
#include<stdio.h>
struct Date
{
int year;
int month;
int day;
};
struct Student
{
char name[30];
int num;
char sex;
struct Date birthday;
}student[10]; //修改此处,下面定义i过大,此处改为10;
int main() //此处建议改为void main()
{
int i;
printf("input student name num sex birthday\n");
for(i=0;i<10;i++)
{
scanf("%s\n",student[i].name); //修改此处,name是数组名,已经是一个指针,无需再取地址
scanf("%d\n",&student[i].num);
scanf("%c\n",&student[i].sex);
scanf("%d %d %d\n",&student[i].birthday.year,&student[i].birthday.month,&student[i].birthday.day);
}
for(i=0;i<10;i++)
{
printf("-------------information----------------\n");
printf("Name : %s\n",student[i].name);
printf("Student number: %d\n",student[i].num);
printf("Sex: %c\n",student[i].sex);
printf("Birthday: %d %d %d\n",student[i].birthday.year,student[i].birthday.month,student[i].birthday.day);
}
} //修改此处,遗漏大括号
追问
我把下面都改成2了。。。但是,为什么会这样呢?另外,int main 和void main 有什么区别呢?
追答
同楼下,这就与C语言的输入有关了,最好在接受字符之前,清除缓存,这样才会确保输入正常。

一般如果函数确定没有返回值的话,用void会比较好,这样可以防止出现错误。

你那种写法会造成空格被sex接受,所以一般输入前要有提示,而且输入字符或字符串前清空缓存是比较好的,用fflush()函数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
沧海雄风2009
2011-07-27 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8525
采纳率:79%
帮助的人:2731万
展开全部
for(i=0;i<10;i++) //10 这个明显放不下 你的student[2]; 怎么放下
{
scanf("%s\n",&student[i].name);/* \n去掉
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
紫英落
2011-07-27 · TA获得超过234个赞
知道小有建树答主
回答量:172
采纳率:0%
帮助的人:79.1万
展开全部
scanf("%s\n",&student[i].name);这句错了,%s是字符串类型,输入时不用加&,所以应该写为 scanf("%s",student[i].name);还有就是\n不用写的,scanf读到回车符直接停止。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
东方苍神
2011-07-27
知道答主
回答量:1
采纳率:0%
帮助的人:0
展开全部
scanf("%s\n",&student[i].name);使用的时候%s作为占位符遇见空白字符(空格、换行符、和制表符),就停止扫描。当你输入姓名li xiao gang时将分别赋给student[i].name); scanf("%d\n",&student[i].num); scanf("%c\n",&student[i].sex);因此输入姓名时最好使用gets()函数。再一个你定义的student[2]数组元素少,会溢出,不定会出现什么错。输入的时候最好是一个printf对应一个输入,不然不好控制格式。

参考资料: http://baike.baidu.com/view/1390039.htm

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式