使用putchar()打印段落

时间:2012-12-29 18:58:09

标签: c

请考虑以下代码: -

#include"stdio.h"

void main()
{
  char ch;
  while((ch=getchar())!=EOF)
  {
    putchar(ch);
  }
}

无论我给出什么输入(作为一个句子),在我按下返回键后重复它。如果我想在最后得到整个段落,我该怎么办?可以使用putchar()完成此操作,因为putchar()只能用于返回单个字符。

6 个答案:

答案 0 :(得分:2)

这不起作用,因为EOF不适合char。请注意,getchar()的正确返回类型为int。例如,请参阅this manual page

如果要一次读取整行,可以将fgets()用于字符缓冲区。我不确定我是否完全理解你想要达到的目标。

答案 1 :(得分:1)

从文件读取时应使用EOF,因为文件以特殊的EOF(文件结尾)字符结尾。您需要在此使用任何标记来表示输入的结尾。

这个程序很有意义,我无法想象在任何地方使用它。因此,重新考虑要求并相应地改变逻辑。

答案 2 :(得分:1)

这段代码可以帮助你

char *buffer;
    int i = 255;

    buffer = (char *)malloc(i*sizeof(char));

    *buffer = getchar();
    while ( *buffer != '?' )
    {
        buffer++;
        *buffer = getchar();
    }

答案 3 :(得分:1)

尝试将char存储到缓冲区中,并在退出while循环时打印缓冲区。试试这段代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    int c;
    char *buf = calloc(1,sizeof(char));
    int len;
    while ((c=getchar())!=EOF) {
        len = strlen(buf);
        buf = realloc(buf, len+1);
        buf[len] = (char) c;
        buf[len + 1] = '\0';
    }
    printf("%s",buf);
}

答案 4 :(得分:1)

如果你想在结尾处获得整个段落,你应该在EOF到达时将输入存储在缓冲区中。然后在循环中打印缓冲区的内容。另外,正如Unwind先生的answer说make,ch变量为int,char错了!

#include"stdio.h"
#define SIZE 1024

void main()
{
  int buffer[SIZE]
  int ch; 
  int i=0;

  // Read and store in a buffer
  while((ch=getchar())!=EOF)
  {
     buffer[i] = ch;
     i++;
  }
  buffer[i] = EOF;

  // now print using putchar(ch);
  i = 0;
  while((ch = buffer[i])  !=EOF)
  {
    putchar(ch);
    i++;
  }

} 

答案 5 :(得分:-1)

cose我们在console / terminal中所做的一切 - 直到我们没有点击Enter / Return / ^ J / ^ M shell没有发送到我们程序的行

你可以通过复制并粘贴一些行来获得段落(超过1行),以便终端|控制台程序显示第一个你粘贴然后重复 - 输出你的程序