1

考虑以下代码:-

#include"stdio.h"

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

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

4

6 回答 6

2

这不起作用,因为EOF不适合 char. 请注意,正确的返回类型getchar()int. 例如参见本手册页

如果您想一次读取整行,例如可以使用fgets()字符缓冲区。不过,我不确定我是否完全理解您想要实现的目标。

于 2012-12-29T19:07:22.463 回答
1

这段代码可以帮助你吗

char *buffer;
    int i = 255;

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

    *buffer = getchar();
    while ( *buffer != '?' )
    {
        buffer++;
        *buffer = getchar();
    }
于 2012-12-29T19:11:51.733 回答
1

尝试将您的字符存储到缓冲区中,并在退出 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);
}
于 2012-12-29T19:32:07.230 回答
1

如果要在结尾处获取整个段落,则应在 EOF 到达时将输入存储在缓冲区中。然后循环打印缓冲区的内容。同样正如 Unwind 先生的回答所说, make, chvariable a 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++;
  }

} 
于 2012-12-29T19:32:26.267 回答
1

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

这个程序没有什么意义,我无法想象在任何地方使用它。所以重新考虑需求并相应地改变逻辑。

于 2012-12-29T19:04:39.417 回答
-1

因为我们在控制台/终端中所做的一切 - 直到我们没有按 Enter/Return/^J/^M shell 才向我们的程序发送行

您可以通过复制和粘贴一些行来获取段落(多于 1 行),因此终端|控制台程序显示 1st u 粘贴然后重复 - u 程序的输出

于 2013-01-12T21:13:13.263 回答