要想基于之前学习过的 C 语言知识实现文本流打印输出的功能,可以考虑使用一个循环结构,通过重复读取一个字符、打印一个字符的过程来实现,如图给出了这个思路的一个粗略流程图实现。
接下来,就是要看看是否可以使用已有的知识将图1中的流程编写成代码。从学习过的 C 语言知识来看,可以使用getchar
和putchar
函数实现图1中“读入一个字符”和“打印刚刚读入的字符”这两个步骤。流程图中“还有字符需要读入”这个步骤要怎么判断呢。既然文本流包含的字符个数和行数不确定,就意味着不能使用一个表示字符个数的常量,或者换行符作为文本流结束的判断依据。
C 语言定义了一个符号常量EOF
( End Of File 的缩写)可以作为文本流的结束标志。
EOF
是 C 语言在头文件 <stdio.h> 中定义的一个特殊值;- 当输入结束时,
getchar
函数返回特殊值EOF
作为结束符。
这样就需要对图1进行改进细化,从而得到最终的算法设计流程图。
设计成c语言程序即:
#include<stdio.h>
main(){
int c;
c = getchar();
while(c != EOF) //当c不是结束符时,进入循环
{
putchar(c);
c = getchar();
}
}
利用 C 语言中赋值表达式的值是左操作数(即赋值号左侧变量)的值的规定,可以将上述代码进行精炼:
#include<stdio.h>
main(){
int c;
while((c = getchar()) != EOF) //先将读取的字符赋给变量c,再将c与EOF比较
putchar(c);
}
任务:
对键盘输入的一段字符进行简单加密变换后输出。
要求:
获取键盘输入的一段字符,将每个字符依次变换成其在 ASCII 码表中后面第5个字符后,再顺序输出变换后的字符(不考虑变换后超出 ASCII 码编码范围的情况)。
测试输入:
qwert
预期输出:
v|jwy
参考:
#include <stdio.h>
#include <stdlib.h>
main()
{
char a;
while((a = getchar())!= EOF)
putchar(a+5);
return 0;
}