输入函数
<1>scanf ,sscanf(输入源是字符串),fscanf(输入源是文件)函数
返回值 :返回成功读入的项目的个数。如果没有读取任何项目返回0。当它检测到文件结尾时,它返回EOF。
输入结束标志: 跳过输入队列的换行符,空格开始读入。遇到换行,空格是结束读入,
注意 :输入字符串时逗号并不能作为分隔符;scanf读入多项数据时,若有一项读入出错,其后面的也不会读入
用于 :一次输入一个单词或以某种标准形式输入的混合类型数据的读取和转换
说明 :紧跟while(getchar() != ‘\n‘) continue;用于删除输入队列中多余的字符。
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() ----- */
运行结果:
34,45,zhou,56[enter]
tian[enter]
<2>gets和fgets(name,MAX,fp)
返回值 :返回一个指向char的指针,如果出错或遇到文件结尾,返回null
输入结束:遇到‘\n‘,文件结尾结束读入,在读入的字符串后添加‘\0‘。gets不读取‘\n‘,fgets读入"\n"
说明 : gets不检查预留存储区是否能容纳实际输入的数据;fgets从fp文件中读入最多MAX-1个字符
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)
<3>getchar()和getc(fp)
返回值:返回来自输入设备的下一个字符,范围0-127,检测到文件结尾时返回EOF
用于 :输入单个字符,它们不需要格式说明符,只对字符起作用。
说明 :不跳过输入队列的换行符,会把换行读入;getc从fp指向的文件中获取一个字符
常用:
while((ch=getchar())!=EOF)
{
if(‘\n‘==ch) continue; //用于跳过换行符
while(getchar()!=‘\n‘) continue; //用于跳过输入行多余的字符
/*执行的内容*/
}
ch=getc(fp)
输出函数
<1>printf, sprintf(输出到数组中)和fprintf(输出到fp指向的文件中)
用于:sprintf可以把几个元素以字符串的形式输出到数组中。
说明:printf() 使用时注意转换说明符的个数,数据类型要相互对应,否则出现段错误;
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‘
<3>
putchar(ch)打印它的参数.
putc(ch, fpout)将将ch写入fpout指向的文件中