之前关于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