C语言问题:下面是结构体和一个子函数,单步执行到 fscanf 时,程序直接跳到了下一行,fscanf 不执行!求教

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言问题:下面是结构体和一个子函数,单步执行到 fscanf 时,程序直接跳到了下一行,fscanf 不执行!求教相关的知识,希望对你有一定的参考价值。

运行环境 TC3.0

struct subject

long c_num; // 课程编号
char c_name[20]; // 课程名称
char c_kind[15]; // 课程性质
int c_period_1; // 授课学时
int c_period_2; // 实验或上机学时
float c_score; // 课程学分
int c_term; // 开课学期
struct subject *next;
;

void c_input() // 录入课程信息

struct subject *p1,*p2;
FILE *fp;
c=0;
clrscr();
if((fp=fopen("c_file","wb"))==NULL)

printf("Can't open the file\n\n");
printf("Press any key to return ");
getch();
return;

printf("Please input the information of course:\n\nnum\tname\tkind\tperiod_1\tperiod_2\tscore\tterm\n\n");
p1=p2=(struct subject *)malloc(sizeof(struct subject));
fscanf(fp,"%ld%s%s%d%d%f%d",&p1->c_num,p1->c_name,p1->c_kind,&p1->c_period_1,&p1->c_period_2,&p1->c_score,&p1->c_term);
while(p1->c_num)

c+=1;
if(c==1) c_head=p1;
else p2->next=p1;
p2=p1;
p1=(struct subject *)malloc(sizeof(struct subject));
fscanf(fp,"%ld%s%s%d%d%f%d",&p1->c_num,p1->c_name,p1->c_kind,&p1->c_period_1,&p1->c_period_2,&p1->c_score,&p1->c_term);

p2->next=NULL;

return;

fscanf 不是输入的意思,而是直接把现有的数据文件,",&p1->c_num,p1->c_name,p1->c_kind,&p1->c_period_1,&p1->c_period_2,&p1->c_score,&p1->c_term" 应该已经有确定的值才行。 先 scanf("%ld%s%s%d%d%f%d",&p1->c_num,p1->c_name,p1->c_kind,&p1->c_period_1,&p1->c_period_2,&p1->c_score,&p1->c_term); 再fscanf(fp,"%ld%s%s%d%d%f%d",&p1->c_num,p1->c_name,p1->c_kind,&p1->c_period_1,&p1->c_period_2,&p1->c_score,&p1->c_term); 就可以了 参考技术A FILE *fp;
c=0; 这个C没定义吧

if(c==1) c_head=p1;
这行C_HEAD也没定义吧、追问

全局变量定义过的。没有报错和警告。fscanf 莫名其妙地跳过,很奇怪。

追答

你最好修改它的输入方式。

C语言的结构体和C++结构体的区别

关于C++中声明结构体中需要使用构造器创建实例对象的语法:

技术分享

接着上两个代码截图你就初步体会到C语言的结构体和C++结构体的区别了:

技术分享    技术分享

 

对于右边的C++结构体的使用类似Java,C++,Swift中的类,类中有构造器方法,然后构造器创建这个类的实例对象。

当然Swift中也有一样用法的结构体。毕竟Swfit是集大家之所成的现代语言。

 

以上是关于C语言问题:下面是结构体和一个子函数,单步执行到 fscanf 时,程序直接跳到了下一行,fscanf 不执行!求教的主要内容,如果未能解决你的问题,请参考以下文章

C语言中 Debug中 step into 和 step over的不同

C语言的结构体和C++结构体的区别

C语言中怎样测试函数执行时间

C语言结构体的“继承”

C语言中的结构体和共用体(联合体)

c语言 结构体和共用体 1. 有5个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入5个学生数据