您的位置:首页 > 其它

1.5 字符输入/输出

2016-03-05 16:00 92 查看
标准库提供的输入/输出模型非常简单.无论文本从何处输入,输出到何处,其输入/输出都是按照字符流的方式处理.文本流是由多行字符构成的字符序列,而每行字符则由0个或多个字符组成.行末是一个换行符.标准库负责每个输入/输出流都能遵守这一模型.

标准库提供一次读/写一个字符的函数,其中最简单的是getchar和putchar函数.

每次调用时,getchar函数从文本流中读入下一个输入字符,并将其作为结果值返回.

每次调用putchar函数时将打印一个字符.

1.5.1 文件复制

#include<stdio.h>
int main()
{
int c;
c = getchar();
while (c!=EOF)
{
putchar(c);
c = getchar();
}
return 0;
}


EOF(end of file) = -1

Windows中 EOF为Ctrl+z

Linux中 EOF为Ctrl+d

上面的字符复制程序可以精炼为:

#include<stdio.h>
int main()
{
int c;
while ((c=getchar())!=EOF)
{
putchar(c);
}
return 0;
}


(c=getchar())!=EOF 与c=getchar()!=EOF 不同

c=getchar()!=EOF 等价于 c=(getchar()!=EOF)

该语句执行后c的值将置为0或1

1.5.2 字符计数

#include<stdio.h>
int main()
{
long nc=0;
while (getchar() != EOF)
{
nc++;
}
printf("%ld\n", nc);
return 0;
}


#include<stdio.h>
int main()
{
long nc;
for (nc = 0; getchar()!=EOF; nc++)
{
;
}
printf("%ld\n", nc);
return 0;
}


1.5.3 行计数

#include<stdio.h>
int main()
{
int c, nl;
nl = 0;
while ((c=getchar())!=EOF)
{
if (c=='\n')
{
nl++;
}
}
printf("%d\n", nl);
return 0;
}


1.5.4 单词计数

#include<stdio.h>
#define IN 1 //在单词内
#define OUT 0 //在单词外
int main()
{
int c;
int nline, nword, nchar;
int state = OUT;
nline = nword = nchar = 0;
while ((c = getchar()) != EOF)
{
if (c == '\n')
{
nline++;
}
if (c == ' ' || c == '\n' || c == '\t')
{
state = OUT;
}
else if (state == OUT)
{
state = IN;
nword++;
}
nchar++;
}
printf("nline=%d\nnword=%d\nnchar=%d\n", nline, nword, nchar);
return 0;
}


程序执行时,每当遇到单词的第一个字符,就作为一个新的单词加以统计.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: