fscanf函数的返回值,函数fscanf(in,%d,&aa[i])什么意思,详细解释每个函数
fscanf函数的返回值,函数fscanf(in,%d,&aa[i])什么意思,详细解释每个函数详细介绍
本文目录一览: fscanf(fp, %s ,str)!=EOF什么意思
fscanf
函数返回值等于
成功读入的参数个数。
fscanf(fp1,"%s",str[n])
只有一个参数,所以
读成功
将
返回
1。
if
(
fscanf(fp1,"%s",str[n])
>
0
)
{
读成功了执行这个块
}
else
{
读失败了
执行这个块
};
中间的%s应该有引号吧。
意思是从fp指向的文件中读取一个字符串到变量str中。
fscanf返回的是实际读取的数据个数,出错或者到结尾时才返回EOF。
EOF的值是-1,文本文件是以ASCII码的形式存储,ASCII码0-127,扩展ASCII为0-255,都没有-1,所以可以用EOF来判断文本文件读到最后了。
fscanf(fp,
%s
,str)!=EOF这句的意思就是用fscanf读fp指向的文件,要读的内容是一个字符串%s,把字符串读到str指向的空间里,如果读成功,fscanf返回成功读取的字符的个数,如果失败,返回EOF。
fscanf返回什么值?
老兄啊! 整体来看返回的值的类型是int
但是 fscanf返回一个什么样的int值 这样看函数体啊!
我给你解释下:
[Copy to clipboard] [ - ]CODE:RETURN VALUE
These functions return the number of input items successfully matched
and assigned, which can be fewer than provided for, or even zero in the
event of an early matching failure.
举个例子:
# include < stdio . h >
main ( )
{
char buf [ 20 ] ;
int num ;
FILE * fp =fopen("f1","r+w") ;
if ( fp = = NULL )
{
perror ( "open" ) ;
exit ( 1 ) ;
}
num = fprintf ( fp , "hello" ) ;
printf ( "%d\n" , num ) ;
rewind ( fp ) ;
num = fscanf ( fp , "%s" , buf ) ;
printf ( "%d\n" , num ) ;
write ( 1 , buf , num ) ;
} 执行结果是
5
1
fscanf()函数的返回值不是实际写入缓冲区的字符个数
而是对几个缓冲区成功进行了写 *** 作,就返回这个个数。
程序中只对buf这一个缓冲区进行了scanf *** 作,所以返回值是1
这是比较深的东西,慢慢领悟吧
正常情况返回它读取的字符的个数.
异常情况返回0.
1.返回实际读取的数据个数,出错或者到结尾返回EOF。
函数原型:
DWORD GetModuleFileName(
HMODULE hModule,
LPTSTR lpFilename,
DWORD nSize
);
2.函数参数说明:
hModule HMODULE 装载一个程序实例的句柄。参数为NULL,函数返回当前应用程序全路径。lpFileName LPTSTR 是存放返回内存块的指针,是输出参数DWORD ,装载到缓冲区lpFileName的最大值,strcat是将szBuf与后边的值连接起来。
关于C语言读取文件及fscanf函数的问题
你的fp1=fp;这里是可以这样用的,但是你要注意此时你的fp文件指针已经移到文件末尾了,你此时再这样用就指空了,所以出错了,你必须得在程序还未使用fp是把地址赋给fp1,或者使用rewind(fp)函数将指针重新一会文件首,在用fp1=fp;这样就对了。
fp,fp1都是文件指针,当你把fp赋给fp1时,两者指的是同一内容,而且其中包含了位置信息,对fp1操作时又改变了位置信息,第二次循环时fp的内容已经改变
用fp1=fp;后,再用fp1操作文件并没有错,但你追问的想法却实现不了。不过原因不在于fp1与fp有什么影响,而在于它两操作的是同一个文件,不论用哪个指针操作,操作后指针承载的位置信息就要发生变化;再用另一个指针时,就与文件的实际操作位置不一致了,从而导致意想不到的问题……
//fp1=fp; //look at here (3) 你这种用法很“奇葩"
for(j=0;j<15;j++) //look at here (4)
fscanf(fp,"%c",&a[1][j]); //依然用fp去读不好吗?
函数名: fscanf
功 能: 从一个流中执行格式化输入,fscanf遇到空格和换行时结束,注意空格时也结束。这与fgets有区别,fgets遇到空格不结束。
返回值:整型,成功返回读入的参数的个数,失败返回EOF(-1)。
用法:
1 int fscanf(FILE*stream,constchar*format,[argument...]);
FILE *stream:文件指针;
char *format:格式字符串;
[argument...]:输入列表。
例如:
FILE* fp;
char a[10];
int b;
double c;
fscanf(fp , "%s %d %lf" , a , &b , &c);
和scanf一样,格式化串的空格不代表读取的子串有空格,存放读取数据的参数都是指针。
扩展阅读,C语言中文件的读取和写:
FILE *pFile=fopen("1.txt","r"); //获取文件的指针
char *pBuf; //定义文件指针
fseek(pFile,0,SEEK_END); //把指针移动到文件的结尾 ,获取文件长度
int len=ftell(pFile); //获取文件长度
pBuf=new char[len+1]; //定义数组长度
rewind(pFile); //把指针移动到文件开头 因为我们一开始把指针移动到结尾,如果不移动回来 会出错
fread(pBuf,1,len,pFile); //读文件
pBuf[len]=0; //把读到的文件最后一位 写为0 要不然系统会一直寻找到0后才结束
MessageBox(pBuf); //显示读到的数据
fclose(pFile); // 关闭文件
c中fscanf返回值说明下
fscanf 返回一个int类型的值,并且这个值等于成功读取数据的个数,例如:
scanf(fp,"%d%d",&a,&b);返回的值为2
fscanf函数的用法
用法:int fscanf(FILE*stream,char*format,[argument...]);解析:int fscanf(文件指针,格式字符串,输入列表);返回值: 类型是整型,成功读入的参数的个数。新建data.txt文件,存入3组坐标,运行程序并输出结果。
fscanf函数的用法 fscanf第一个参数需要一个文件指针,为了查看实验效果,这里先新建一个名为test.txt的文本文件,放在源代码的文件夹,输入如下内容:
123
123.456
Hello world !
要对文件操作,必须将该文件打开:
fp = fopen("test.txt", "r");
同时使用完毕后不要忘记使用fclose关闭文件。
test.txt第一行保存的是一个整数,所以可以使用fscanf先读取一个整数:
fscanf(fp, "%d", &num);
test.txt第二行保存了一个浮点数,按照浮点数的格式进行读取:
fscanf(fp, "%f", &fNum);
需要注意的是,由于浮点数位于第二行,所以要想读取这个浮点数,应当先把第一个数读完,否则读取的回事123.000000
同样可以使用类似的方法读取位于第三行的字符串:
fscanf(fp, "%s", str);
但是,从程序的运行结果发现,第三行存储的是Hello world !,而实际运行结果只有“Hello”,这表明fscanf遇到空格会终止本次读操作。
当将fscanf第一个参数设定为stdin时,将实现和scanf函数相同的效果:
fp = stdin;//设置fp为标准输入
fscanf(fp, "%d", &num);//从fp读取一个整数
求C语言 fscanf的用法,?
你的理解错了,这是将文件中的数据输入到程序中的变量,这个函数是一个输入函数,参考sscanf用法。
sscanf示例如下,得到n=1,sz="asdf"
{
char* str = "1 asdf";
int n;
char sz[10];
sscanf(str, "%d%s", &n, &sz);
printf("%d %s", n, sz);
}
fscanf示例如下,加入pf是指向文件内容为1 asdf的文件指针,得到n=1,sz="asdf"
{
int n;
char sz[10];
sscanf(pf, "%d%s", &n, &sz);
printf("%d %s", n, sz);
}
功 能: 从一个流中执行格式化输入
用 法: int fscanf(FILE *stream, char *format,[argument...]);
int fscanf(文件指针,格式字符串,输入列表);
返回值:整型,数值等于[argument...]的个数
程序例:
#include
#include
int main(void)
{
int i;
printf("Input an integer: ");
if (fscanf(stdin, "%d", &i))
printf("The integer read was: %d\n",
i);
else
{
fprintf(stderr, "Error reading an \
integer from stdin.\n");
exit(1);
}
return 0;
}
返回EOF如果读取到文件结尾。
功 能: 从一个流中执行格式化输入\x0d\x0a 用 法: int fscanf(FILE *stream, char *format,[argument...]);\x0d\x0a int fscanf(文件指针,格式字符串,输入列表);\x0d\x0a 返回值:整型,数值等于[argument...]的个数\x0d\x0a 程序例:\x0d\x0a #include \x0d\x0a #include \x0d\x0a int main(void)\x0d\x0a {\x0d\x0a int i;\x0d\x0a printf("Input an integer: ");\x0d\x0a if (fscanf(stdin, "%d", &i))\x0d\x0a printf("The integer read was: %d\n",\x0d\x0a i);\x0d\x0a else\x0d\x0a {\x0d\x0a fprintf(stderr, "Error reading an \\x0d\x0a integer from stdin.\n");\x0d\x0a exit(1);\x0d\x0a }\x0d\x0a return 0;\x0d\x0a }\x0d\x0a 返回EOF如果读取到文件结尾。
C语言文件读取fscanf(),该怎么处理
……
因为%s在读取的时候需要遇到分隔符才中断,所以你文件保存的数据之间要有空格。也就是说你文件中保存的应该是1
tt
66
66
66
66
66
330。即在保存时,应为:
fprintf(fp,"%d
%s
%d
%d
%d
%d
%d
%d",
&r[i].key,
r[i].name,
&r[i].score[0],
&r[i].score[1],
&r[i].score[2],
&r[i].score[3],
&r[i].score[4],
&r[i].total);
fscanf位于头文件
中,函数原型为int fscanf(FILE*stream, constchar*format, [argument...]); 其功能为根据数据格式(format)从输入流(stream)中写入数据(argument);与fgets的差别在于:fscanf遇到空格和换行时结束,注意空格时也结束,fgets遇到空格不结束。
函数名: fscanf
功 能: 从一个流中执行格式化输入,fscanf遇到空格和换行时结束,注意空格时也结束。这与fgets有区别,fgets遇到空格不结束。
返回值:整型,成功返回读入的参数的个数,失败返回EOF(-1)。
用法:
1 int fscanf(FILE*stream,constchar*format,[argument...]);
FILE *stream:文件指针
char *format:格式字符串
[argument...]:输入列表
格式字符说明
常用基本参数对照:
%d:读入一个十进制整数.
%i :读入十进制,八进制,十六进制整数,与%d类似,但是在编译时通过数据前置或后置来区分进制,如加入“0x”则是十六进制,加入“0”则为八进制。例如串“031”使用%d时会被算作31,但是使用%i时会算作25.
%u:读入一个无符号十进制整数.
%f %F %g %G : 用来输入实数,可以用小数形式或指数形式输入.
%x %X: 读入十六进制整数.
%o': 读入八进制整数.
%s : 读入一个字符串,遇空字符‘\0'结束。
%c : 读入一个字符。无法读入空值。空格可以被读入。
附加格式说明字符表修饰符说明
L/l 长度修饰符 输入"长"数据
h 长度修饰符 输入"短"数据
示例说明
如果要求从标准输入中输入一串字符串和一个整型数,那么参数“%s%d”表示什么呢?默认情况下,在终端上(这里假设程序为控制台应用程序)输入第一个参数的值的时候敲下回车,则在第二行输入的为第二个参数值,采用这种输入方法那么格式字符的形式就无关紧要了。[1]
这里要特殊说明的是如果参数在同一行给出,那么格式字符的参数与终端的输入会有什么关系。举个例子:如果格式字符为“%s+%d”,那么参数的输入就应该为 string + integer。
程序例
例一
#include
#include
int main(void)
{
int i;
printf("Input an integer:");
/*从标准输入中读取一个整数*/
if(fscanf(stdin, "%d",&i))
printf("The integer read was:%d\n", i);
else
{
fprintf(stderr, "Error reading an integer from stdin.\n");
exit(1);
}
return 0;
}
返回EOF如果读取到文件结尾。
例二
附:MSDN中例子
#include
FILE *stream;
int main(void)
{
long l;
float fp;
char s[81];
char c;
stream = fopen("fscanf.out", "w+");
if(stream==NULL)
printf("The file fscanf.out was not opened\n");
else
{
fprintf(stream,"%s%ld%f%c","a-string", 65000,3.14159, 'x');
/*将指针设置至文件开头*/
fseek(stream,0L,SEEK_SET);
/*从文件中读取数据*/
fscanf(stream,"%s",s);
fscanf(stream,"%ld",&l);
fscanf(stream,"%f",&fp);
fscanf(stream,"%c",&c);
/*输出读取的数据*/
printf("%s\n",s);
printf("%ld\n",l);
printf("%f\n",fp);
printf("%c\n",c);
fclose(stream);
}
return 0;
}//这样会有意外输出
函数fscanf(in,%d,&aa[i])什么意思,详细解释每个函数
函数名: fscanf
功 能: 从一个流中执行格式化输入
用 法: int fscanf(FILE *stream, char *format,[argument...]);
int fscanf(文件指针,格式字符串,输入列表);
for example: FILE *fp; char a[]; int b; double c;
fscanf(fp,%s%d%lf,a,&b,&c)
返回值:整型,数值等于[argument...]的个数
编辑本段格式字符说明
常用基本参数对照:
%d:读入一个十进制整数.
%i :读入十进制,八进制,十六进制整数,与%d类似,但是在编译时通过数据前置来区分进制,如加入“0x”则是十六进制,加入“0”则为八进制。例如串“031”使用%d时会被算作31,但是使用%i时会算作25.
%u:读入一个无符号十进制整数.
%f %F %g %G : 用来输入实数,可以用小数形式或指数形式输入.
%x %X: 读入十六进制整数.
%o': 读入八进制整数.
%s : 读入一个字符串,遇空格结束。
%c : 读入一个字符。无法读入空值。空格可以被读入。 附加格式说明字符表修饰符说明 L/l 长度修饰符 输入"长"数据 h 长度修饰符 输入"短"数据
C语言 格式读取 fscanf() 如何读取至末尾结束(txt)
fscanf如果读取到文件尾会返回NULL, 可以从这点判断是不是到文件尾.
while(!fscanf(stream, "format", ...));
这样就可以把一个文件的内容读取完毕.
stream是输入流, 即文件指针.
"format"是格式字符串, 即用于写%s, %d的地方.
... 即后面跟的不定参数.
fscanf是有返回值的。如果返回EOF,证明到达文件结尾
fscanf是有返回值的。如果返回EOF,证明到达文件结尾
在C语言中,或更精确地说成C标准函数库中表示文件结束符(end of file)。在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。在文本文件中,数据都是以字符的ASCII代码值的形式存放。我们知道,ASCII代码值的范围是0~127,不可能出现-1,因此可以用EOF作为文件结束标志。
扩展资料:
应用
档案存取或其它 I/O 功能可能传回等于象征符号值 (巨集) EOF 指示档案结束的情形发生。实际上 EOF 的值通常为 -1,但它依系统有所不同。巨集 EOF会在编译原始码前展开实际值给预处理器。
C语言中,EOF常被作为文件结束的标志。还有很多文件处理函数处错误后的返回值也是EOF,因此常被用来判断调用一个函数是否成功。