C语言fscanf问题

void readfile()//建立信息
{
char buf[BUFLEN],*p="student.dat";
FILE *fp;
int i=0;
if ((fp=fopen("student.dat","r+"))==NULL) //把此程序和文件student.dat放在同一目录下
{
printf("Open file %s error! Print any key to exit!",p);
}
while(fscanf(fp,"%s %s%d%s %s %s %s %s",stu[i].code,stu[i].name,&stu[i].age,
stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail)==8)
{
i++;
}
fclose(fp);
n=i;
printf("录入完毕!\n");
}
这段代码中fscanf的返回值为什么是8??谢谢

下面介绍一个例子, 运行后产后一个test.dat的文件。
例11:
#include<stdio.h>
main()
{
char *s="That's good news"); /*定义字符串指针并初始化*/
int i=617; /*定义整型变量并初始化*/
FILE *fp; /*定义文件指针*/
fp=fopne("test.dat", "w"); /*建立一个文字文件只写*/
fputs("Your score of TOEFLis", fp);/*向所建文件写入一串字符*/
fputc(':', fp); /*向所建文件写冒号:*/
fprintf(fp, "%d\n", i); /*向所建文件写一整型数*/
fprintf(fp, "%s", s); /*向所建文件写一字符串*/
fclose(fp); /*关闭文件*/
}
用DOS的TYPE命令显示TEST.DAT的内容如下所示:
屏幕显示
Your score of TOEFL is: 617
That's good news
2. 文件的顺序读操作函数
fscanf()、fgets()和fgetc()函数
函数fscanf()、fgets()和fgetc()均为文件的顺序读操作函数, 其调用格式
如下:
int fscanf(FILE *stream, char *format, <address-list>);
char fgets(char *string, int n, FILE *steam);
int fgetc(FILE *steam);
fscanf()函数的用法与scanf()函数相似, 只是它是从文件中读到信息。
fscanf()函数的返回值为EOF(即-1), 表明读错误, 否则读数据成功。fgets()函
数从文件中读取至多n-1个字符(n用来指定字符数), 并把它们放入string指向的
字符串中, 在读入之后自动向字符串未尾加一个空字符, 读成功返回string指针,
失败返回一个空指针。fgetc()函数返回文件当前位置的一个字符, 读错误时返
回EOF。
下面程序读取例11产生的test.dat文件, 并将读出的结果显示在屏幕上。
例12
#include<stdio.h>
main()
{
char *s, m[20];
int i;
FILE *fp;
fp=fopen("test.dat", "r"); /*打开文字文件只读*/
fgets(s, 24, fp); /*从文件中读取23个字符*/
printf("%s", s); /*输出所读的字符串*/
fscanf(fp, "%d", &i); /*读取整型数*/
printf("%d", i); /*输出所读整型数*/
putchar(fgetc(fp)); /*读取一个字符同时输出*/
fgets(m, 17, fp); /*读取16个字符*/
puts(m); /*输出所读字符串*/
fclose(fp); /*关闭文件*/
getch(); /*等待任一键*/
}
运行后屏幕显示:
Your score of TOEFL is: 617
That's good news
如果将上例中fscanf(fp, "%d", &i)改为fscanf(fp, "%s", m), 再将其后
的输出语句改为printf("%s", m), 则可得出同样的结果。由此可见Turbo C2. 0
中只要是读文字文件, 则不论是字符还是数字都将按其ASCII值处理。 另外还要
说明的一点就是fscanf()函数读到空白符时, 便自动结束, 在使用时要特别注意

参考资料:http://ericxl06.blog.sohu.com/81792642.html

温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-07-17
此处返回值等于得到输入值的输入项的个数,返回8时表示8个输入项都得到值,表示录入完毕本回答被提问者采纳
第2个回答  2009-07-17
因为fscanf(fp,"%s %s%d%s %s %s %s %s",stu[i].code,stu[i].name,&stu[[i].age,stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail)中,你的"%s %s %d %s %s %s %s %s",的个数是8,所以fscanf的返回值也是8
同理,如果是fscanf(fp,"%s",stu[i])这样的,它的返回值就是1
希望你能明白!!本回答被网友采纳
第3个回答  2009-07-17
读了8个输入项。
字符串算一个。
相似回答