一个关于scanf/printf函数的问题
#include<stdio.h>
typedef struct{
char *stu_no;//学生学号
char *stu_name;//学生姓名
float grade_one;
float grade_two;
float grade_three;
} student;
void main()
{
student stu[3];
for(int i=0;i<3;i++)
{
printf("请输入学生学号:\n");
scanf("%s",&stu[i].stu_no);
fflush(stdin);
printf("请输入学生姓名:\n");
scanf("%s",&stu[i].stu_name);
printf("请输入* %s *的课程1的成绩:\n",&stu[i].stu_name);
scanf("%f",&stu[i].grade_one);
printf("请输入* %s *的课程2的成绩:\n",&stu[i].stu_name);
scanf("%f",&stu[i].grade_two);
printf("请输入* %s *的课程3的成绩:\n",&stu[i].stu_name);
scanf("%f",&stu[i].grade_three);
}
printf("============================================================\n");
printf("学号 姓名 课程1成绩 课程2成绩 课程3成绩\n");
printf("============================================================\n");
for(int j=0;j<3;j++)
{
printf("%-8s %-8s %10.1f %10.1f %10.1f\n",&stu[j].stu_no,
&stu[j].stu_name,stu[j].grade_one,stu[j].grade_two,stu[j].grade_three);
}
}
当我输入的学号,姓名分别是001,张李三时,程序输出的姓名却只有张李没有‘三’,这是为什么?我对这对函数的用法很不熟悉,希望高手指点。
char *stu_no;//学生学号
char *stu_name;//学生姓名
printf("请输入学生学号:\n");
scanf("%s",&stu[i].stu_no);///去掉 &
fflush(stdin);
printf("请输入学生姓名:\n");///去掉 &
scanf("%s",&stu[i].stu_name);
指针弄了一个下午还是不行...还是用数组吧
#include<stdio.h>
typedef struct{
char stu_no[100];//学生学号//把指针改为用数组
char stu_name[100];//学生姓名
float grade_one;
float grade_two;
float grade_three;
} student;
void main()
{
student stu[1];
for(int i=0;i<1;i++)
{
printf("请输入学生学号:\n");
scanf("%s",&stu[i].stu_no);
printf("请输入学生姓名:\n");
scanf("%s",&stu[i].stu_name);
printf("请输入* %s *的课程1的成绩:\n",stu[i].stu_name);
scanf("%f",&stu[i].grade_one);
printf("请输入* %s *的课程2的成绩:\n",stu[i].stu_name);
scanf("%f",&stu[i].grade_two);
printf("请输入* %s *的课程3的成绩:\n",&stu[i].stu_name);
scanf("%f",&stu[i].grade_three);
}
printf("============================================================\n");
printf("学号 姓名 课程1成绩 课程2成绩 课程3成绩\n");
printf("============================================================\n");
for(int j=0;j<1;j++)
{
printf("%s %s %10.1f %10.1f %10.1f\n",stu[j].stu_no,
stu[j].stu_name,stu[j].grade_one,stu[j].grade_two,stu[j].grade_three);//好象用二级指针就不行,看看高手们怎么说
}
}
为什么不用string 类型的,char没有这个好使
这种情况是用char[]比较方便,用malloc动态分配的话最后还要free
scanf("%s",&stu[i].stu_no);改成:
scanf("%s",stu[i].stu_no);
或者scanf("%s",&stu[i].stu_no[0]);(或许会提醒你是否分配内存)
初学c的时候很喜欢这样写:
char temp[100];
for(int i=0;i<3;i++)
{
printf("请输入学生学号:\n");
scanf("%s",temp);
stu[i].stu_no = (char*)malloc(strlen(temp)+1);////最少的空间
strcpy(stu[i].stu_no,temp);//////最多的时间
...
#include<stdio.h>
typedef struct{
char *stu_no;//学生学号
char *stu_name;//学生姓名
float grade_one;
float grade_two;
float grade_three;
} student;
void main()
{
student stu[3];
int y; /* used for initailize the char* */
for(int i=0;i<3;i++)
{
/*give the init address */
stu[i].stu_no = &y;
stu[i].stu_name = &y+100;
printf("请输入学生学号:\n");
scanf("%s",stu[i].stu_no);/*delete the <code>&</code> */
fflush(stdin);
printf("请输入学生姓名:\n");
scanf("%s",stu[i].stu_name);/*delete the <code>&</code> */
printf("请输入* %s *的课程1的成绩:\n",stu[i].stu_name);
scanf("%f",&stu[i].grade_one);
printf("请输入* %s *的课程2的成绩:\n",stu[i].stu_name);
scanf("%f",&stu[i].grade_two);
printf("请输入* %s *的课程3的成绩:\n",stu[i].stu_name);
scanf("%f",&stu[i].grade_three);
}
printf("============================================================\n");
printf("学号 姓名 课程1成绩 课程2成绩 课程3成绩\n");
printf("============================================================\n");
for(int j=0;j<3;j++)
{
printf("%-8s %-8s %10.1f %10.1f %10.1f\n",stu[j].stu_no,
stu[j].stu_name,stu[j].grade_one,stu[j].grade_two,stu[j].grade_three);
}
}
I wish you can solve this problem with the pointer, not array! :)
stu[i].stu_no = &y;
stu[i].stu_name = &y+100;
//这两句不能这样子赋值.类型不一样.要不就得把上面的
//int y; 改成 char y;