考虑以下代码:-
#include"stdio.h"
void main()
{
char ch;
while((ch=getchar())!=EOF)
{
putchar(ch);
}
}
无论我给出什么输入(作为一个句子),在我按下回车键后都会重复。如果我想在最后得到整个段落,我该怎么办?这可以使用putchar()
因为putchar()
只能用于返回单个字符来完成。
考虑以下代码:-
#include"stdio.h"
void main()
{
char ch;
while((ch=getchar())!=EOF)
{
putchar(ch);
}
}
无论我给出什么输入(作为一个句子),在我按下回车键后都会重复。如果我想在最后得到整个段落,我该怎么办?这可以使用putchar()
因为putchar()
只能用于返回单个字符来完成。
这不起作用,因为EOF
不适合 char
. 请注意,正确的返回类型getchar()
是int
. 例如参见本手册页。
如果您想一次读取整行,例如可以使用fgets()
字符缓冲区。不过,我不确定我是否完全理解您想要实现的目标。
这段代码可以帮助你吗
char *buffer;
int i = 255;
buffer = (char *)malloc(i*sizeof(char));
*buffer = getchar();
while ( *buffer != '?' )
{
buffer++;
*buffer = getchar();
}
尝试将您的字符存储到缓冲区中,并在退出 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);
}
如果要在结尾处获取整个段落,则应在 EOF 到达时将输入存储在缓冲区中。然后循环打印缓冲区的内容。同样正如 Unwind 先生的回答所说, make, ch
variable 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++;
}
}
从文件读取时应使用 EOF,因为文件以特殊的 EOF(文件结尾)字符结尾。您需要在此处使用任何标记来表示输入的结尾。
这个程序没有什么意义,我无法想象在任何地方使用它。所以重新考虑需求并相应地改变逻辑。
因为我们在控制台/终端中所做的一切 - 直到我们没有按 Enter/Return/^J/^M shell 才向我们的程序发送行
您可以通过复制和粘贴一些行来获取段落(多于 1 行),因此终端|控制台程序显示 1st u 粘贴然后重复 - u 程序的输出