首页 > 代码库 > 输入输出函数小结
输入输出函数小结
输入函数
<1>scanf ,sscanf(输入源是字符串),fscanf(输入源是文件)函数
返回值 :返回成功读入的项目的个数。如果没有读取任何项目返回0。当它检测到文件结尾时,它返回EOF。
输入结束标志: 跳过输入队列的换行符,空格开始读入。遇到换行,空格是结束读入,
注意 :输入字符串时逗号并不能作为分隔符;scanf读入多项数据时,若有一项读入出错,其后面的也不会读入
用于 :一次输入一个单词或以某种标准形式输入的混合类型数据的读取和转换
int main (int argc, char **argv)
{
char *name1 = NULL ;
char name2[10] ;
int i=0, j=0, k=0, l=0;
char *name3 = "hello world" ;
char name4[10] ;
char name5[10] ;
char name6[10] ;
i = scanf("%d,%d,%s,%d", &j, &k, name1, &l); //j=34,k=45,l=0;scanf返回2,成功读入j和k;name1是NULL,读入出错,在这里停止读入
j = scanf("%s,%d", name2,&i); //输入队列的"zhou,56"被输入到name2,scanf返回1,不要认为56会被赋给i
k = sscanf(name3,"%s%s", name4, name5); //字符串的name3作输入源,赋值给name4="hello",name5="world",sscanf返回2
l = fscanf(stdin, "%s", name6); //name6="tian",fscanf返回1
return 0;
} /* ----- End of main() ----- */
int main (int argc, char **argv)
{
char name[10] ;
char name1[10] ;
char *name2 = NULL ;
char *p1=NULL ;
char *p2=NULL;
char *p3=NULL;
p1=fgets(name, 10, stdin); //返回的指针指向name
p2=gets(name1); //返回的指针指向name1
p3=gets(name2); //name2没有分配内存空间,name2没地方放,出现段错误
return 0;
} /* ----- End of main() ----- */
运行结果<1>:
hello[enter] //name="hello"
world[enter] //name1="world"
zhou[enter]
Segmentation fault (core dumped)
运行结果<2>:
hello world[enter] //name="hello wor" name1="ld"
zhou[enter]
Segmentation fault (core dumped)
}
int main (int argc, char **argv)
{
char *str = "hello world";
char buf[20];
int i = 23;
sprintf(buf, "%s,%d", str, i);
fprintf(stdout, "%s,%d\n", str, i);
printf("%s\n", str,i);
printf("%s,%d\n", str);
printf("%s,%s\n", str,i); //数据类型不匹配,出现段错误!!!
return 0;
} /* ----- End of main() ----- */
运行结果:
hello world,23
hello world
hello world,4196184
Segmentation fault (core dumped)
<2>puts(name)和fputs(name,fp)
输出停止:遇到空字符‘\0‘时停止输出。
说明 :puts显示字符串时自动添加换行符;fputs不自动添加换行符
注意字符数组没有‘\0‘
输入输出函数小结