【问题标题】:how putchar works with while loop?putchar 如何与 while 循环一起工作?
【发布时间】:2015-01-31 20:28:44
【问题描述】:

我是c编程的新手,所以希望你们能帮助我解决这些问题。

1。我以为putchar() 每次只打印 1 个字符,而当我输入几个像 'hello' 这样的字符时,它会在允许我输入下一个输入之前打印 'hello'?我认为它应该只打印 'h' 然后允许我输入其他输入,因为 getchar() 每次只返回一个字符。

2。如何使循环停止?我知道 EOF 的值为 -1,但是当我输入 -1 时,循环仍然运行。

#include <stdio.h>

main()
{   

    int c = getchar();

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

}

【问题讨论】:

标签: c


【解决方案1】:

在第一个getchar()读完一个字符后,下一个getchar();while()循环内,所以按照逻辑,它会一直一个接一个地读取输入,直到遇到@ 987654324@.

按照相同的逻辑,putchar(c);while 循环下,因此它将打印getchar() 读取并存储在c 中的所有字符[每个循环一个字符]。

在 linux 中,EOF 是通过按 CTRL+D 生成的。在等待输入的时候,如果你按下这个组合键,终端驱动会把这个转换成EOFwhile循环就会中断。

windows我不是很确定,但是组合键应该是CTRL+Z

注意:即使输入-1 看起来应该按照EOF 工作,实际上它不会。 getchar() 一次无法读取-1。在两次连续迭代中,它将被读取为-1。还值得一提的是,字符 1 不等于整数 1。一个字符1,一旦被读取,将被相应地编码[主要是ASCII]并存储相应的值。

【讨论】:

  • 所以循环忽略表达式:c = getchar()。但是为什么c在输入中只返回一个字符,putchar()仍然可以打印所有输入呢?
【解决方案2】:
  1. getchar() 从控制台获取输入。在 while 循环中,它会从输入中读取所有字符,包括返回键。

  2. -1 是“-1”。它不是一个值,而只是另一个字符组合。 EOF 发生在缓冲区中没有更多字符时。即当您按 Enter(或 Ctrl-Z 或 Ctrl-D,具体取决于您的操作系统)时

【讨论】:

  • 您确定按ENTER 发送EOF,而不是\n
  • @Sourav。你说的对。 Enter 会将输入发送到程序,但不会停止循环。你需要一个 if (c == '\n') break;什么的。
猜你喜欢
  • 2019-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-03
  • 2011-08-06
  • 1970-01-01
  • 2013-07-06
  • 1970-01-01
相关资源
最近更新 更多