关于c语言scanf如何输入的问题
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);
} 展开
#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
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()函数
{
scanf("%s\n",&student[i].name);/* \n去掉
参考资料: http://baike.baidu.com/view/1390039.htm
广告 您可能关注的内容 |