谈谈C语言中的输入和输出
2018-01-19 23:11
405 查看
要使用C语言中的输入和输出,第一步要引入标准的库函数<stdio.h>
1.getc&putc函数
int getc( File * stream)
int putc(int char, File * stream)
getc函数通过接收一个流对象,将流中的一个字符读入,而putc将传入的字符输送到对应的流中,流对象既可以是标准输入输出流也可以是用户自己进行的文件操作。
如果是标准输入输出流对象的操作,那么这两个方法等价与getchar(void)和putchar(void) which means:
int character=getc(stdin)其效果等价与int character=getchar();
putc(character,stdout)=putchar(character);
void testChar(){ int character=0; printf("请输入一个字符:"); character=getc(stdin); int character2=0; printf("请输入另外一个字符:\n"); character2=getchar(); printf("我是字符1:"); putc(character,stdout); printf("\n"); printf("我是字符2:"); putchar(character2); printf("h"); }
当我们输入第一个字符x并且激动的按下回车的时候却发现,我们没有办法再输入第二个字符了!其实按下回车的这个动作也被stdin收录在缓冲区中了,也就是相当于x\n,所以最后我们打印出来的h是在新的一行出现的,而不是紧跟在字符2:之后。\n是不可见字符但是却占据一个字符的。
2.gets&puts函数
char *gets(char *str);
int puts(const char *str);
在C语言中没有定义字符串,在程序中要想表示字符串通常使用字符数组的形式 char str[size] ;而gets和puts函数是从stdin和stdout进行字符串的读入和写出的。这里要注意的是gets()中输入的长度不能够超过字符数组的size否则程序会报错
调用fgets函数的时候需要注意,fgets函数只能读取buffer容量的size-1个字符,fgets函数会默认将最后的一个字符填充为\0,并且将str内容进行返回。
3.fgetc&fputc&fgets()&fputs()
其实这几个函数的作用和上面函数的差不多,只不过传递的参数不同
int fgetc(FILE *stream);
char *fgets(char *str, int n, FILE *stream);
int fputc(int char, FILE *stream);
int fputs(const char *str, FILE *stream);
int ungetc(int char, FILE *stream); //这个方法是将stream中的指针位置后退一步,也就是恢复一个字符。
void getcharMethod(){ int character=0; int number=0; char str[10]; char str2[10]; printf("you need to input an character:"); character=getchar(); printf("you need to input an interger too:"); scanf("%d",&number); printf("please input another series of string:"); fgets(str2,10,stdin); printf("you need to input a series of string:"); gets(str);//gets function does not work on linx OS so we need to use the fgets printf("the character you input is %c\n",character); // %c %f %s %d represents different types printf("another way to ouput this charcter:"); putchar(character); printf("\n"); puts(str);//puts function does not work on Linux OS fputs(str2,stdout); }
stdin首先读入一个c\n9.getchar处理了第一个c,scanf又读取了后面的9此时的stdin中尚且还有一个换行字符,所以str2最后输出的也是空行。由于str2的容量大于1,所以str可以完整的读取abcdef并且输出。
我们来调整一下程序顺序
void getcharMethod(){ int character=0; int number=0; char str[10]; char str2[10]; printf("you need to input a series of string:"); gets(str);//gets function does not work on linx OS so we need to use the fgets printf("please input another series of string:"); fgets(str2,10,stdin); printf("you need to input an character:"); character=getchar(); printf("you need to input an interger too:"); scanf("%d",&number); printf("the character you input is %c\n",character); // %c %f %s %d represents different types printf("another way to ouput this charcter:"); putchar(character); printf("\n"); puts(str);//puts function does not work on Linux OS fputs(str2,stdout); }
当str2=1234567890,str=123456789的时候我们又发现了无法输入的问题
str2句末的时候塞了一个回车给str,而str又将后面的回车塞给了charcter.(O(≧口≦)O)!
所以如果str的可见字符长度为8的话,我们就可以继续进行输入
相关文章推荐
- C语言的基本输入与输出函数(全解)
- c语言 输入两个人数 输出两个数的积
- c语言学习之结构篇代码演示样例-输入n个同学的姓名,数学英语成绩,依照平均分从低到高排序并输出
- 【C语言总结】C语言输入/输出函数
- c语言实现,输入一个数,转为16进制输出
- c语言:有一函数:当x<0,y=-1;x=0,y=0;x>0,y=1;编一程序,输入一个x值,要求输出相应的y值。
- C语言:在字符串中找出第一个只出现一次的字符。如输入“abaccdeff”,则输出&#39;b&#39;
- 【C语言】输入一个整数,输出该数二进制表示中1的个数(三种方法)
- C语言:用递归函数DigitSum(n)实现输入1729,输出sum=1+7+2+9=19的值
- C语言实现输入三个数字后按大小顺序将三个数字输出
- Android For JNI(二)——C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器
- Day3、C语言数据类型、变量的输入与输出、进制的转换
- C语言的本质(23)——C标准库之输入与输出(上)
- C语言的文件输入输出(39)
- C语言文件方式输入与输出(最简洁方便实用的一种方式)
- [置顶] C语言基本变量语法输出和输入方法
- 谈谈python的文件处理——文件的输入与输出
- 【C语言助教】随机产生100个数,判断用户输入的key是否在,并且输出key的位置
- C语言输入一个数,倒序输出
- [转]C语言文件输入/输出ACM改进版(freopen函数)