使用getchar和putchar或C语言第2版中的示例

时间:2014-02-17 08:32:32

标签: c

代码1:

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

代码2:

   #include<stdio.h>

    main( )
    {
        int c,d;
        c=getchar();
        d=getchar();
        putchar(c);
        putchar(d);
   }

1)如果           输入:bo           输出:bo    我在第二个程序中知道这个,它将它们存储在变量c和d中,但它将它们存储在第一个程序中。

2)PL。解释第一个程序的工作,为什么它重复任何单词,尽管它的长度超过一个字符。

3)从书中我知道每当我进入或遇到一些错误时都会遇到EOF但是即使按下回车键,这个程序也不会停止,但它会再次打印下一行字符。

2 个答案:

答案 0 :(得分:2)

对于问题一,它将他们存储在c中(但一次只能存储一个)。更好的缩进代码是:

while ((c = getchar()) != EOF)
    putchar(c);

所以你可以看到,对于输入c每个字符,它也会输出它。请记住,语法是以下的缩写形式:

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

所以你可以看到循环的每次迭代都得到下一个字符。


第二个问题,我假设你问为什么它适用于任何长度输入。那是因为它不关心长度。它只是存储和回显每个角色。

如果你愿意,你可以给它十亿个字符。


对于第三个,你得到EOF的错误或文件的结尾(在Windows行开头的CTRL-Z,通常 CTRL-D在类UNIX操作系统下,除非你设置了一些奇怪的终端特性。)

如果您只对感兴趣,可以使用以下内容:

while ((c = getchar()) != '\n')
    putchar(c);
putchar ('\n');

答案 1 :(得分:0)

while ((c = getchar()) != EOF)

从stdin读取值,直到遇到EOF(文件结束)。因此,相同的变量c存储在不同迭代中读取的不同值。

在第二个例子中,只有两个变量(char类型),所以它只能读取和存储两个字符。