各位帮帮忙,为什么用scanf()函数给struct结构体进行赋值时,格式符之间用逗号间隔时,输出的结果会出错
各位大虾帮帮忙,为什么用scanf()函数给struct结构体进行赋值时,格式符之间用逗号间隔时,输出的结果会出错
大家帮忙看看,为什么用scanf()函数给struct结构体进行赋值时,格式符之间用逗号间隔时,输出的结果会出错,但是当我把逗号换成空格时输出就不会出错了
#include<stdio.h>
void main()
{
struct student
{
char name[15];
char sex;
int age;
float score;
}stu[3];
int i;
printf("Input 3 dates\n");
for(i=0;i<3;i++)
scanf("%s,%c,%d,%f",stu[i].name,&stu[i].sex,&stu[i].age,&stu[i].score);
for(i=0;i<3;i++)
printf("%s,%c,%d,%4.1f\n",stu[i].name,stu[i].sex,stu[i].age,stu[i].score);
}
------解决方案--------------------
scanf("%s,%c,%d,%f",//这个地方,你的逗号是中文的
------解决方案--------------------
scanf("%s",s)是遇到 (空格 | TAB符 | 换行符)才停下来的,所以你用逗号分隔的话它会连逗号一起读进去,也就可能一整行都读进去了,所以输入不对了。
建议你了解一下scanf("%s",...) 和 scanf("%c",...)
------解决方案--------------------
scanf()函数接收输入一串数据时,遇以下情况结束一个数据的输入:(不是结束该scanf函数,scanf函数仅在每一个数据域均有数据,并按回车后结束)。
① 遇空格、“回车”、“跳格”键。
② 遇宽度结束。
③ 遇非法输入。
------解决方案--------------------
你输入的同时也要把
scanf("%s,%c,%d,%f",stu[i].name,&stu[i].sex,&stu[i].age,&stu[i].score);
数据分隔的逗号输进去。
------解决方案--------------------
对不对,主要看你是怎么输入的,比如
大家帮忙看看,为什么用scanf()函数给struct结构体进行赋值时,格式符之间用逗号间隔时,输出的结果会出错,但是当我把逗号换成空格时输出就不会出错了
#include<stdio.h>
void main()
{
struct student
{
char name[15];
char sex;
int age;
float score;
}stu[3];
int i;
printf("Input 3 dates\n");
for(i=0;i<3;i++)
scanf("%s,%c,%d,%f",stu[i].name,&stu[i].sex,&stu[i].age,&stu[i].score);
for(i=0;i<3;i++)
printf("%s,%c,%d,%4.1f\n",stu[i].name,stu[i].sex,stu[i].age,stu[i].score);
}
------解决方案--------------------
scanf("%s,%c,%d,%f",//这个地方,你的逗号是中文的
------解决方案--------------------
scanf("%s",s)是遇到 (空格 | TAB符 | 换行符)才停下来的,所以你用逗号分隔的话它会连逗号一起读进去,也就可能一整行都读进去了,所以输入不对了。
建议你了解一下scanf("%s",...) 和 scanf("%c",...)
------解决方案--------------------
scanf()函数接收输入一串数据时,遇以下情况结束一个数据的输入:(不是结束该scanf函数,scanf函数仅在每一个数据域均有数据,并按回车后结束)。
① 遇空格、“回车”、“跳格”键。
② 遇宽度结束。
③ 遇非法输入。
------解决方案--------------------
你输入的同时也要把
scanf("%s,%c,%d,%f",stu[i].name,&stu[i].sex,&stu[i].age,&stu[i].score);
数据分隔的逗号输进去。
------解决方案--------------------
对不对,主要看你是怎么输入的,比如
- C/C++ code
scanf("%s,%c,%d,%f",stu[i].name,&stu[i].sex,&stu[i].age,&stu[i].score);
------解决方案--------------------
------解决方案--------------------
楼上是对的,%c %d %f都没问题,而%s输出会把“,”一起输进去的,楼上最后输%s,才是正解