jw_lee

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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

 

 

 

 

posted on 2013-07-22 09:54  jw_lee  阅读(330)  评论(0编辑  收藏  举报