美文网首页
C 笔记四 一个简单的文本复制程序

C 笔记四 一个简单的文本复制程序

作者: 吃柠檬的鸮 | 来源:发表于2019-03-18 21:01 被阅读0次

编写程序,把输入一次一个字符地复制到输出:

/* inout.c */
#include <stdio.h>

int main() {
    int c;
  
    while ((c = getchar()) != EOF) {
        putchar(c);
    }

    return 0;
}

getcharputchar 是标准库提供的一次读 / 写一个字符的函数。getchar 函数从文本流中(通常是从键盘输入)读入下一个输入字符,并将其作为结果值返回。putchar 将变量的内容以字符形式打印出来(通常是显示在屏幕上)。

字符在机器内部是以为位模式存储的,char 类型专门用于存储字符型数据,这里不把 c 声明为 char ,而是声明为 int ,是因为 c 必须足够大以存放 getchar 函数返回的任何值。

EOF 是文件结束符(end of file),定义在头文件 <stdio.h> 中,是一个整型数。当没有输入的时候,getchar 就会返回一个 EOFwhile 循环语句就会终止执行。

while ((c = getchar()) != EOF) {
    /* ... */
}

/* 等价于 */
c = getchar();
while(c != EOF) {
    /* ... */
    c = getchar();
}

对于 while 的条件判断语句,由于不等于运算符 != 的优先级高于赋值运算符 =,所以 (c = getchar()) 的圆括号不可省略。

c = getchar() != EOF;

/* 上面的语句等价于 : */
c = (getchar() != EOF);

对上面程序进行编译运行:

  1. 第一行 Hello, world! 是从键盘输入的文本,回车结束当前文本输入,由 putchar 逐个字符打出第二行:
Hello, world!
Hello, world!
  1. 第一个 Hello, world! 是从键盘输入的文本,键入 Ctrl + d 结束当前文本输入,由 putchar 逐个字符打印出第二个 *Hello, world!":
Hello, world!Hello, world!

一个习题:
编写程序, 打印 EOF 的值,并验证表达式 getchar() != EOF 的值是 0 还是 1。

// ex.c
#include <stdio.h>

int main() {
    printf("%d\n", EOF);
    printf("%d", getchar() != EOF);
    
    return 0;
}

编译运行结果:

  1. 输入 'h' :
-1
h
1
  1. 输入 ’Ctrl + d' :
-1
0
  1. 输入换行符
-1

1

相关文章

网友评论

      本文标题:C 笔记四 一个简单的文本复制程序

      本文链接:https://www.haomeiwen.com/subject/gwzbmqtx.html