原网址:(2条消息) C/C++ 标准输入、输出流用法_wudi_demaxiya的博客-CSDN博客_c语言输入输出流
1.C/C++标准输入、输出流的用法
C的标准输入输出:
标准文件 | 文件指针 | 设备 |
标准输入 | stdin | 键盘 |
标准输出 | stdout | 屏幕 |
标准输入和标准输出是两个文件,stdin 和 stdout 是两个文件指针,分别指向标准输入和标准输出;
同理 stderr 也是一个文件指针,它所指向的文件代表标准输出出错;
总结:C中的标准输出和标准错误输出是stdout和stderr两个 "File *" 类型的文件指针。
char *str;
fputs(str, stderr);
fgets()函数:
头文件:#include <stdio.h>
函数原型:char *fgets(char *s, int size, FILE *stream);
功能:从stream流中读取 size 个字符,存储到 指针s中; //stream可以是标准输入流stdin,也可以是文件流;
用法:char str[20];
char *string = str;
printf("请输入字符:"); //注意这里没有换行符;
fgets(string, 19, stdin);
printf("string = %s", string);
输入:i love you
输出结果:i love you
(输出结果之后会自动换行)
系统会自动检测 size 是否大于字符串s的长度,如果size 大于 字符串s的长度 多余的部分就会置为 '\0',比如字符数组s长度为n,则size最大为n-1(n需要留给'\0'),
注意:fgets() 函数不会丢弃输入的换行符(也就是输入的enter键);所以即使printf()中没有'\n',也会自动换行;而 gets() 函数会丢弃换行符;
总之,fgets() 和 gets() 都会把换行符取出来,也就是缓冲区不再有换行符了;
fputs() 函数:
函数原型:int fputs(const char *s, FILE *stream);
头文件:# include <stdio.h>
fputs() 函数是 fwrite()函数的别名,stream可以是标准输出流,也可以是文件流,标准输出流就是屏幕输出流;
fouts() 和 puts() 的区别:
1.puts() 只能输向标准输出流,也就是屏幕输出流,fputs()也可以输出其他流,如文件流 和 stderr;
2.使用puts()的时候,系统会在后面自动添加换行符,使用fputs()的时候,系统不会添加换行符;
问题:使用fputs()的时候,是不是要添加 printf("\n"); ?
需要看情况,如果是fgets()的输入,就会自动保存换行符,就不需要添加printf("\n");
如果是gets()的输入,就会自动丢弃换行符,就需要添加printf("\n");
举一反三:
scanf() 从标准输入流stdin标准格式化输入;
printf() 函数发送格式化输出到标准输出流stdout;
int getchar(void) 从标准输入流stdin获取一个字符,并把它返回为一个整数(因为putchar的入参是一个整数);
char c;
c = getchar();
int putchar(int c) 把字符输出到标准输出流stdout上;
putchar(c);
char *gets(char *s) 从标准输入流stdin读取一行到s所指向的缓冲区,直到出现换行符或文件结尾为止(会丢弃换行符);
char str[200];
gets(str);
int puts(const char *s) 把字符串s和一个换行符 输出到标准输出流stdout
put(str);
二:C++的标准输入、输出;