之前关于getchar的使用有个误区。getchar是一句输入结束后,挨个挨个读取的。
getchar用法
int getchar(void),从标准输入中一次读取一个字符。可以从键盘读入,也可以从文件读入。
从文件读入的方法:
#include<stdio.h> FILE *fp; void main(){ char c; fp=freopen("test.txt","r",stdin); while((c=getchar())!=EOF){ putchar(c); } }
注意while((c=getchar())!=0),c=getchar()两边要再加括号。判断的是c的值,c从getchar读入后的值。一开始总以为c=getchar()会返回个1什么的。
gets()从标准输入中一次读入一句。可以键盘读入,可以文件读入。
从文件读入方法:
#include<stdio.h> #include<string.h> FILE *fp; void main(){ char getstr[128]; char tmpstr[128]; char matchstr[128]; fp=freopen("test.txt","r",stdin); while(gets(getstr)){ if(strcmp(getstr,tmpstr)==0){ if(strcmp(getstr,matchstr)!=0){ printf("%s\n",getstr); strcpy(matchstr,getstr); } } strcpy(tmpstr,getstr); } }
putchar也可以从文件输出
#include<stdio.h> FILE *fp; FILE *sp; void main(){ char c; fp=freopen("test.txt","r",stdin); sp=freopen("oput.txt","w",stdout); while((c=getchar())!=EOF){ putchar(c); } }
关键应该是输入输出流的重定向:
fp=freopen("test.txt","r",stdin); sp=freopen("oput.txt","w",stdout);
重定向以后用printf语句也会从文件输出。
fopen与freopen的区别在于fopen可以配合fclose使用,灵活关闭打开文件。使用freopen所以输入输出语句都是在文件中操作,使用fopen可以结合键盘输入,文件输入。
使用fopen从文件读入字符要用fgetc(),如
while((c=fgetc(fp))!=EOF){ putchar(c); }
来源:https://www.cnblogs.com/jwplus/p/3204735.html